无法实例化Spring bean存储库
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法实例化Spring bean存储库相关的知识,希望对你有一定的参考价值。
在此任务中,我不允许使用自动布线
所以我试图创造类似的东西: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的接口,它给出了一个错误,它没有被实例化,并且在服务中我确实需要调用存储库来保存等等。怎么解决这个?
我在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);
}
更新了线路
既然你没有用Spring Boot
标记问题,我会假设你使用的是香草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
中包含引用.xml文件的ApplicationConfig
。
如果你没有在FoodRepository
接口上添加额外的方法,就没有必要实现它,因此你不能做new FoodRepository()
。
更新:
由于这是一个Spring Boot
应用程序,您只需要:
添加对pom.xml
的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
使用@Configuration
注释主类(或@EnableMongoRepositories
-annotated class)
配置属性:
spring.data.mongodb.host=
spring.data.mongodb.port=
spring.data.mongodb.database=
以上是关于无法实例化Spring bean存储库的主要内容,如果未能解决你的问题,请参考以下文章