【发布时间】: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