无法实例化Spring bean存储库

问题描述 投票:0回答:2

在此任务中,我不允许使用自动布线

所以我试图创造类似的东西: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 mongodb spring-boot model-view-controller javabeans
2个回答
1
投票

我在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);
}

0
投票

更新了线路

既然你没有用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=
© www.soinside.com 2019 - 2024. All rights reserved.