Spring Java Config - @Bean Overriding Bean определение не работает

У меня есть bean-компонент с именем Customer в проекте A. В проекте B у меня есть проект A как зависимость от maven.

В проекте B Java Config (@Configuration) я попытался получить новую реализацию bean-компонента Customer под названием CustomerImpl.

@Bean
public Customer customer() {
return new CustomerImpl()
}

Клиент здесь класс.

Но в моем контексте всегда есть Customer, а НЕ CustomerImpl, который я хотел.

Когда я помещаю @Qualifier и использую это имя квалификатора вместо customer() в приведенной выше конфигурации, тогда он работает нормально. Но я не хочу указывать квалификатор.


person user2069929    schedule 07.10.2015    source источник
comment
Клиент — это класс или интерфейс?   -  person Andres    schedule 07.10.2015
comment
Клиент здесь класс.   -  person user2069929    schedule 07.10.2015


Ответы (3)


В своем комментарии вы говорите, что Клиент - это класс.

Попробуйте определить возвращаемый тип из метода customer() как интерфейс (например, ICustomer), а не класс. Сделайте так, чтобы Customer и CustomerImpl реализовывали этот интерфейс.

@Bean
public ICustomer customer() {
return new CustomerImpl()
}
person Andres    schedule 07.10.2015
comment
вы имеете в виду CustomerImpl как интерфейс ?? - person user2069929; 07.10.2015
comment
@user2069929 user2069929 Нет, создайте новый интерфейс (например, ICustomer) и заставьте классы Customer и CustomerImpl реализовать этот интерфейс. Затем измените метод клиента, чтобы он возвращал ICustomer вместо Customer. - person Andres; 07.10.2015

Дайте двум bean-компонентам разные имена, например.

@Bean(name=customerImpl)
public Customer customerImpl() {
  return new CustomerImpl()
}

и используйте имя, чтобы получить нужный экземпляр, например.

@Resource(name=customerImpl)
private Customer customer;
person Michal    schedule 07.10.2015

Проблема исправлена. Сделал 2 изменения. Добавлен @Primary и указано другое имя метода

@Primary
@Bean
public Customer newMethodName() {
return new CustomerImpl()
}
person user2069929    schedule 08.10.2015