代码之家  ›  专栏  ›  技术社区  ›  lightrek

在使用@组件的过程中创建了多少个@Autowired“prototype”bean实例

  •  0
  • lightrek  · 技术社区  · 2 年前

    我有一个 Manager 类注释为 @Component ¨和 @Scope

    @Component
    
    @Scope(value = "prototype")
    
    public class Manager {
       ...
    }
    

    所以我希望有一个新的 经理 每次请求bean时都会创建bean。

    那么我有一个 Adapter 使用此的类 经理 豆要使用它,我有两种自动连线的方法:1。在属性或2上。在构造函数上:

    @Component
    
    public class Adapter {
        @Autowired
    
        Manager m_Manager;
    
        ...
    }
    

    @Component
    
    public class Adapter {
        Manager m_manager;
    
        @Autowired
    
        public Adapter(Manager manager) {
            m_manager = manager;
        }
    
        ...
    }
    

    Adaptor 类是一个单例bean,因此 @Autowire 这个 经理 在属性或构造函数上,将只创建 经理 ?意思 经理 bean实际上被用作单例bean而不是原型bean,对吗?

    2 回复  |  直到 2 年前
        1
  •  1
  •   Alex    2 年前

    @Autowire的行为方式与ApplicationContext相同。getBean

    它为每个自动连线实例创建一个原型bean。您可以看到,两个单例中的原型对象具有不同的标识符 enter image description here

    因此,每个单例都有自己的原型实例。如果在构造函数或字段中使用@Autowire,则没有任何区别。 在构造函数上执行Autowire是避免注释重复的更方便的方法。

    P、 定义范围最好使用

    @Scope(BeanDefinition.SCOPE_PROTOTYPE)
    
        2
  •  1
  •   dunni    2 年前

    如果没有任何其他注入点,在那里注入一个Manager实例,那么在应用程序上下文中只有一个实例,这是正确的。