Как создать два бина с одинаковым классом с помощью метода и закидывать их в определнные классы?
Всем привет, я хочу создать пару бинов в классе с разной конфигурацией то типу :
public class Clazz {
//класс у бина одинаковый Client, но внутри конфигурация разная
//инициализируется через методы
@Bean(name="Bean1")
public Client1 (){}
@Bean(name = "Bean2")
public Clien2t (){}
}
И прокидывать какой то из них, который нужен в нужные классы c помощью конструкции
public class ClassForInjectBean1{
@Autowired
@Qualifier("Bean1")
@NotNull
Client client
....
}
public class ClassForInjectBean2{
@Autowired
@Qualifier("Bean2")
@NotNull
Client client
....
}
На самом деле я пробовал в классах, куда надо инжектить и вариант типа :
@Resource(name = "Bean2")
@NotNull
Client client
и пробовал
@Autowired
@Qualifier("Bean2")
Но он не понимает, какой из двух бинов прокидывать
Ошибка : Parameter 1 of constructor in ClassForInjectBean1 required a single bean, but 2 were found: - Bean1 : defined by method 'Client1' in class path resource... - Bean1: defined by method ''Client1' in class path resource... Почему не получается прокинуть ?
Я в курсе, что можно сделать интерфейс, имплиментить его и закидывать компонеты, как здесь https://www.baeldung.com/spring-qualifier-annotation , но хотелось бы с помощью метода, тогда не надо плодить кучу сущностей
Ответы (1 шт):
Все таки лучше было бы реализовать интерфейс. Не понятно, Clazz это @Configuration или @Component? Если это компонент, то документация не рекомендует так делать, в таком случае вы получите lite @Bean. Лучше сделать так:
@Configuration
public class ClientConfig {
@Bean("client1")
public Client client1() {
var client = new Client();
client.setSomeFieldName(1);
client.setSomeFieldName(2);
client.setSomeFieldName(3);
client.setSomeFieldName(4);
return client;
}
@Bean("client2")
public Client client2() {
var client = new Client();
client.setSomeFieldName(5);
client.setSomeFieldName(6);
client.setSomeFieldName(7);
client.setSomeFieldName(8);
return client;
}
}