У меня есть bean-компонент Employee с типом зависимости Address. Пытаюсь настроить автоподключение в javaConfig. Но получаю NoQualifyingBeanException.
Хотя я использую аннотацию @Qualifier() следующим образом:
@Configuration
public class MyConfig {
@Bean(name = "addr1")
public Address address() {
return new Address("Hello","hi",112233);
}
@Bean(name = "address")
public Address addressAgain() {
return new Address("See You","Bi",114422);
}
@Bean(name = "emp",autowire=Autowire.BY_TYPE)
@Qualifier("addr1")
public Employee employee() {
Employee e = new Employee();
e.setName("Raghu");
e.setEmpID(111);
//e.setAddress(address());
return e;
}
}




Недостаточно указывать разные атрибуты name в каждом методе @Bean.
Вам следует подумать о том, чтобы пометить один из bean-компонентов как @Primary:
@Primary
@Bean(name = "address")
public Address addressAgain() {
return new Address("See You");
}
А остальные оставьте без:
@Bean(name = "addr1")
public Address address() {
return new Address("Hello","hi", 112233);
}
Обратите внимание, что вам не нужно добавлять аннотацию @Qualifier("addr1") в метод employee(), чтобы иметь возможность автоматически подключать bean-компонент addr1.
Spring уже знает экземпляр bean-компонента Address, на который вы ссылаетесь при установке зависимости от метода @Bean: address().
Так что достаточно:
@Bean(name = "emp", autowire = Autowire.BY_TYPE)
public Employee employee() {
Employee e = new Employee();
e.setName("Raghu");
e.setAddress(address());
return e;
}