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