当在spring @Component中使用@Autowired时,spring会为组件的每个实例确定自动装配候选,这在使用@ Request / @ Session范围内的Web东西时确实不好。为什么Spring不会只在ApplicationContext中创建一个bean定义并重新使用它呢?有没有办法做到这一点?

最佳答案

AutowiredAnnotationBeanPostProcessor是一个BeanPostProcessor,而不是一个BeanFactoryPostProcessor,因此根据设计,它无法编辑Bean定义。以不同的方式实现将破坏预期的功能:

public class MyBean{

    @Autowired(required=false)
    public void setOtherBean(OtherBean o){this.otherBean=o;}
    private OtherBean otherBean;

}


如果没有OtherBean实例可用,则不会进行连接,但是只要一个实例可用(我可以很容易地以编程方式连接一个实例),下一个MyBean实例(如果作用域不是单例)将获得新的(以前不可用)。

我并不是说这是我以前遇到过的用例,但这是一个有效的用例,如果事情按照您建议的方式进行,它就会中断。

09-05 03:56