在使用 @Component 期间创建了多少个 @Autowired "prototype" bean 实例

How many instance(s) of @Autowired "prototype" bean is(are) created during the usage of a @Component

我有一个 Managerclass 注释 @Component@Scope

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

所以我希望每次请求 bean 时都会创建一个 Manager bean 的新实例。

然后我有一个 Adapter class 使用这个 Manager bean。要使用它,我有两种 Autowire 方法: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 class 是单例 bean,所以 @Autowire Manager 在 属性 或构造函数上都只会创建一个Manager 的实例?意思是 Managerbean 实际上被用作单例 bean 而不是原型 bean,对吧?

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

@Autowire 的行为方式与 ApplicationContext.getBean

相同

它为每个自动装配的实例创建一个原型 bean。可以看到两个单例中的原型对象有不同的标识符

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

P.S。定义范围最好使用

@Scope(BeanDefinition.SCOPE_PROTOTYPE)