Пользовательский интерфейс Spring Data MongoDB ConflictingBeanDefinitionException

После Руководство Spring Data MongoDB, я создал репозиторий и классы реализации. Однако, когда я запускаю загрузку приложения Spring, происходит сбой с

Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException:
Annotation-specified bean name 'mockTestRepositoryImpl' for bean class [com.foo.testapp.mongo.repository.impl.MockTestRepositoryImpl] conflicts with existing, non-compatible bean definition of same name and class [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);
}

Весенний репозиторий данных:

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

person suman j    schedule 08.08.2014    source источник
comment
Попробуйте удалить @Component из MockTestRepositoryImpl и дайте мне знать, что произойдет   -  person geoand    schedule 08.08.2014
comment
Это работало без @Component. Спасибо. Опубликуйте это как ответ. Я приму. Но мне было интересно, почему весенние данные и весеннее сканирование контекста не работают синхронно и создают дубликаты.   -  person suman j    schedule 08.08.2014
comment
Я добавил это как ответ. Хороший вопрос вы задали! Сначала подумал, что Spring должен иметь возможность игнорировать аннотацию, но я уверен, что есть некоторые глубокие внутренние вещи Spring, препятствующие тому, чтобы это было легко реализовать.   -  person geoand    schedule 08.08.2014


Ответы (1)


Проблема в том, что вы аннотировали MockTestRepositoryImpl с помощью @Component.

Нужно вообще убрать @Component (как видите в мануале такой аннотации нет — но все фичи Spring работают корректно).

person geoand    schedule 08.08.2014