我正在查看一些遗留代码并发现这里有一个singelton bean说X和我在其中自动装配原型bean,如:
@Controller
public class X {
@Autowired
private Y y;
// ....
}
Y定义为:
@Component
@scope("prototype")
public class Y {
}
根据我的理解,在singelton bean中注入原型bean我们有两种方法
现在在上面的代码中没有使用上述方法。所以我会相信虽然原型bean是在X类中注入的,但它仍然表现为singelton bean,在整个应用程序范围内,只有单个Y实例可以在X类中使用吗?
答案 0 :(得分:0)
在这种情况下,如果没有代理(查找方法注入),X将有一个Y的单个实例,它不会在X方法的调用之间发生变化(创建Y的实例并且当应用程序上下文构造X时,自动装入X.如果另一个Z类自动将Y自动装入,它也会获得自己的实例(不与X共享)。因为Y被声明为原型(每次从应用程序上下文请求Y的实例时,都会创建一个新实例)。
有关更多信息,请参阅示例Spring IoC容器文档5.5.2和5.5.3:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/beans.html#beans-factory-scopes-prototype
答案 1 :(得分:0)
是。每次从上下文获取时,原型bean都会创建新实例。 在这种情况下,Spring创建单例(类X)ant然后从上下文获取类型为Y的bean以将其注入X.这将在应用程序的生命周期中仅发生一次。因此,在X中注入的Y实例将与X一样长。