无法实例化 Spring bean 存储库

Can't instantiate Spring bean repository

在这个任务中我不允许使用自动接线

所以我正在尝试创建类似于此的内容:https://www.tutorialspoint.com/spring/spring_java_based_configuration.htm

我的代码

@Configuration
public class ApplicationConfig {

    @Bean
    public FoodService foodService() {
        return new FoodService(FoodRepository());
    }

    @Bean
    public FoodRepository foodRepository() {
        return new FoodRepository();
    }
}

当然,由于 FoodRepository 是一个扩展 MongoRepository 的接口,它给出了一个错误,它没有被实例化,并且肯定在服务内部我需要调用 Repository 来保存等等。如何解决?

已更新 下线

因为你没有用 Spring Boot 标记问题,我假设你使用的是 vanilla Spring

根据 https://docs.spring.io/spring-data/mongodb/docs/1.2.0.RELEASE/reference/html/mongo.repositories.html 你需要:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:mongo="http://www.springframework.org/schema/data/mongo"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/data/mongo
    http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd">

  <mongo:mongo id="mongo" />

  <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
    <constructor-arg ref="mongo" />
    <constructor-arg value="databaseName" />
  </bean>

  <mongo:repositories base-package="com.acme.*.repositories" />

</beans>

我建议创建一个类似的文件并包含 @Import 并引用 ApplicationConfig.xml 文件。

如果您不向 FoodRepository 接口添加其他方法,则无需实现它,因此您无法执行 new FoodRepository().


已更新:

由于这是一个 Spring Boot 应用程序,您只需要:

添加对pom.xml的依赖:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

@EnableMongoRepositories

注释主class(或@Configuration-注释class)

配置属性:

spring.data.mongodb.host=
spring.data.mongodb.port=
spring.data.mongodb.database=

我在Spring Data MongoDB documentation

中找到了答案

在 ApplicationConfig.java 里面我应该做以下事情:

@Configuration
@EnableMongoRepositories("com.food.repository")
public class ApplicationConfig {
@Value("${spring.data.mongodb.host}")
private String mongoHost;

@Value("${spring.data.mongodb.port}")
private int mongoPort;

@Value("${spring.data.mongodb.database}")
private String mongoDB;

@Bean
public foodService foodService() {
    MongoOperations operations = new MongoTemplate(new MongoClient(mongoHost,mongoPort), mongoDB);
    MongoRepositoryFactory factory = new MongoRepositoryFactory(operations);
    foodRepository foodRepository = factory.getRepository(foodRepository.class);
    return new foodService(foodRepository);
}