因此,在阅读@Lookup
文档时,它说它不适用于@configuration
类中的工厂方法,而且我读到,每当我们使用新的实例化时,弹簧注释都不会被处理。因此,我尝试了一下,@autowired
注释在@Bean
定义的实例上起作用:
@Configuration
@ComponentScan("autowired_qualifier_resource")
public class Application {
@Bean(name="firstBean")
@Qualifier("qualifierBean")
TestBeanInterface myBean(){
return new TestBean1();
}
public static void main(String[] args) {
ApplicationContext context = SpringApplication.run(Application.class);
System.out.println(context.getBean("firstBean"));
}
}
public class TestBean1 implements TestBeanInterface {
private BeanInterface bean;
@Autowired
public TestBean1(){
System.out.println("TestBean1");
}
@Autowired
public void setBean( BeanInterface bean){
System.out.println("SetBean :" + bean);
this.bean = bean;
}
}
setBean
方法被调用,并给出相同类型具有多个对象的错误。那么,当其他注释起作用时,为什么查找方法不能在@Bean
定义的类上使用?
来自docs
此类查找方法可以具有默认(存根)实现,只需被容器替换,或者可以将它们声明为抽象-容器在运行时填充它们。同时在这种情况下,容器将生成方法的运行时子类通过CGLIB包含类,这就是为什么这种查找方法只能在容器通过常规实例化的bean上工作构造函数:即无法在bean上替换查找方法从工厂方法返回的,我们无法动态提供它们的子类。
我希望这是不言而喻的。