我正在使用一些现有代码,它正在做我以前从未见过的事情。我已经使用方法注入(inject)将原型(prototype) bean Autowiring 到单例中,或者使用 getBean() 从上下文中获取 bean。我在这段代码中看到的是一个 bean,它是一个原型(prototype)并使用 getBean() 检索,并且它具有 Autowiring 的依赖项。其中大多数都是单例 bean,这是有道理的。但是有另一个原型(prototype) bean 的 Autowiring ,从我所看到的来看,它似乎确实得到了一个新的 bean。我的问题是,当您将原型(prototype) Autowiring 到原型(prototype)中时,这会给您一个新实例吗?由于 Autowiring 请求不是在启动时而是在创建此 bean 时发出,因此它是否会创建一个新实例?这违背了我对 Autowiring 和原型(prototype) bean 的想法,我想听到来自野外的答案。感谢您的任何见解。我试图尽量减少对这段代码的重构,因为它有点像意大利面条。
示例:
@Scope("prototype")
public class MyPrototypeClass {
@Autowired
private ReallyGoodSingletonService svc;
@Autowired
private APrototypeBean bean;
public void doSomething() {
bean.doAThing();
}
}
@Scope("prototype)
public class APrototypeBean {
private int stuffgoeshere;
public void doAThing() {
}
}
那么,当调用 MyPrototypeClass 中的 doSomething() 时,该“bean”是单例还是为 MyPrototypeClass 的每个实例创建一个新的?
最佳答案
在您的示例中,APrototypeBean
bean 将被设置为一个全新的 bean,它将一直存在,直到您创建的 MyPrototypeClass
实例被销毁为止。
如果您创建 MyPrototypeClass
的第二个实例,那么该第二个实例将接收其自己的 APrototypeBean
。使用当前配置,每次调用 doSomething()
时,都会在该 MyPrototypeClass
唯一的 APrototypeBean
实例上调用该方法对象。
关于java - 将原型(prototype) bean Autowiring 到原型(prototype) bean 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26131603/