无法实例化 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);
}
在这个任务中我不允许使用自动接线
所以我正在尝试创建类似于此的内容: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
@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);
}