【问题标题】:spring data mongodb custom interface ConflictingBeanDefinitionExceptionspring data mongodb 自定义接口 ConflictingBeanDefinitionException
【发布时间】:2014-08-08 13:42:49
【问题描述】:

按照Spring Data MongoDB 手册,我创建了存储库和实现类。但是,当我启动我的应用程序时,spring bootstrap 失败了

引起:org.springframework.context.annotation.ConflictingBeanDefinitionException: bean 类 [com.foo.testapp.mongo.repository.impl.MockTestRepositoryImpl] 的注解指定的 bean 名称“mockTestRepositoryImpl”与现有的、不兼容的同名和类 bean 定义冲突 [com.foo.testapp.mongo.repository .impl.MockTestRepositoryImpl]

我的配置和代码:(groovy)

package com.foo.testapp.mongo.repository.impl

@Component
class MockTestRepositoryImpl implements MockTestRepositoryCustom {
    MongoOperations mongoOperations   
    @Autowired
    MockTestRepositoryImpl(MongoOperations mongoOperations) {
        this.mongoOperations = mongoOperations
    }   
    @Override
    MockTest findAndModify(Query query, Update update, FindAndModifyOptions options) {
        return mongoOperations.findAndModify(query, update, options, MockTest)
    }   
    @Override
    boolean exists(Query query) {
        return mongoOperations.exists(query, MockTest)
    }
}

自定义界面:

package com.foo.testapp.mongo.repository
public interface MockTestRepositoryCustom {
    MockTest findAndModify(Query query, Update update, FindAndModifyOptions options)
    boolean exists(Query query);
}

Spring 数据存储库:

package com.foo.testapp.mongo.repository
public interface MockTestRepository extends MongoRepository<MockTest, String>, MockTestRepositoryCustom {
List<MockTest> findByDeleted(boolean deleted);
    MockTest findByIdAndDeleted(String id, boolean deleted);
    @Query(value = "{ 'deleted' : ?0 }", fields = "{ 'name' : 1 }")
    List<MockTest> findAllBasicInfo(boolean deleted);
}

【问题讨论】:

  • 尝试从 MockTestRepositoryImpl 中删除 @Component 并告诉我会发生什么
  • 它在没有@Component 的情况下工作。谢谢。将此作为答案发布。我会接受。但是想知道为什么 spring 数据和 spring 上下文扫描不同步并创建重复项。
  • 我将其添加为答案。这是你提出的一个好问题!起初认为 Spring 应该能够忽略注释,但我敢打赌,Spring 内部有一些深层的东西阻碍了它的易于实现

标签: spring spring-data spring-data-mongodb


【解决方案1】:

问题是你用@Component注释了MockTestRepositoryImpl

您需要完全删除 @Component(正如您在手册中看到的那样,没有这样的注释 - 但所有 Spring 功能都可以正常工作)。

【讨论】:

    猜你喜欢
    • 2017-03-22
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 2017-02-09
    • 2020-07-27
    • 2020-04-12
    • 1970-01-01
    • 2013-07-28
    相关资源
    最近更新 更多