У меня проблема с некоторыми определениями Spring bean. У меня есть несколько xml файлов контекста, которые загружаются моим методом main(), и оба они содержат почти исключительно тег. Когда мой основной метод запускается, я получаю эту ошибку от Spring:
Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'converterDAO' for bean class [my.package.InMemoryConverterDaoImpl] conflicts with existing, non-compatible bean definition of same name and class [my.other.package.StaticConverterDAOImpl]
Оба класса DAO аннотируются следующим образом:
@Repository("converterDAO")
public class StaticConverterDAOImpl implements ConverterDAO {
...
}
В памяти dao также есть аннотация @Repository ( "converterDAO" ). Дао ссылается на другие классы следующим образом:
...
private @Autowired @Qualifier("converterDAO") ConverterDAO converterDAO;
...
Я хочу, чтобы один DAO переопределял определение другого, что, как я всегда понимал, это была одна из основных причин использования основы DI. Я делал это с определениями xml в течение многих лет и никогда не испытывал никаких проблем. Но не так с помощью компонентного сканирования и аннотированных определений bean? И что означает Spring, когда говорится, что они не "совместимы"? Они реализуют один и тот же интерфейс, и они автоматически добавляются в поля этого типа интерфейса. Почему они не совместимы?
Может ли кто-нибудь предоставить мне способ для одного аннотированного, компонентного сканирования bean переопределить другой?
-Mike