我有一个 Manager 类注释为 @Component ¨和 @Scope
Manager
@Component
@Scope
@Component⨠@Scope(value = "prototype")⨠public class Manager { ... }
所以我希望有一个新的 经理 每次请求bean时都会创建bean。
经理
那么我有一个 Adapter 使用此的类 经理 豆要使用它,我有两种自动连线的方法:1。在属性或2上。在构造函数上:
Adapter
@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,对吗?
Adaptor
@Autowire
@Autowire的行为方式与ApplicationContext相同。getBean
它为每个自动连线实例创建一个原型bean。您可以看到,两个单例中的原型对象具有不同的标识符
因此,每个单例都有自己的原型实例。如果在构造函数或字段中使用@Autowire,则没有任何区别。 在构造函数上执行Autowire是避免注释重复的更方便的方法。
P、 定义范围最好使用
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
如果没有任何其他注入点,在那里注入一个Manager实例,那么在应用程序上下文中只有一个实例,这是正确的。