是否应该在@configuration中的@Bean定义的类上使用Spring注释?

问题描述 投票:0回答:1

因此,在阅读@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定义的类上使用?

spring configuration annotations
1个回答
0
投票

来自docs

此类查找方法可以具有默认(存根)实现,只需被容器替换,或者可以将它们声明为抽象-容器在运行时填充它们。同时在这种情况下,容器将生成方法的运行时子类通过CGLIB包含类,这就是为什么这种查找方法只能在容器通过常规实例化的bean上工作构造函数:即无法在bean上替换查找方法从工厂方法返回的,我们无法动态提供它们的子类

我希望这是不言而喻的。

© www.soinside.com 2019 - 2024. All rights reserved.