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

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

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

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

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

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

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

3 ответа

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

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

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

Дайте двум бобам разные имена, например

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

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

@Resource(name=customerImpl)
private Customer customer;

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

@Primary
@Bean
public Customer newMethodName() {
return new CustomerImpl()
}
Другие вопросы по тегам