[英]What is the difference between bean with scope prototype and new Object in singleton bean?
喜欢主题。 我认为这些方法之间没有任何区别。 当我仅使用原型bean时,原型bean就很清楚。 但是在春季,我们基于单例的bean,因此当我在单例bean中使用带范围原型的bean时,看起来就像我要创建新的Object一样。
@Service
public class SomeService{
@Autowired
private ApplicationContext applicationContext;
public void someClass() {
PrototypeObject prototypeObject = applicationContext.getBean(PrototypeObject .class);
PrototypeObject prototypeObject = new PrototypeObject();
}
}
这两种方法之间有区别吗?
对我来说最好的答案是:我失去了IoC的任何优势。
他们是完全不同的。
Spring Managed Beans :每当使用@Bean创建一个bean或使用@ Inject / @ Autowired调用任何bean时,它们都在Spring上下文中,并且它们可以执行Spring相关的功能,或者从应用程序Context中获取它(尽管不建议这样做,因为它是反对控制权倒置)。
非Spring托管Beans :每当您使用new创建一个bean时,它们就会从Spring上下文中移出,并且它们不再可以在Spring Managed Context中使用。
使用new创建的对象不知道任何Spring注释和相关功能。
让我们从众所周知的“ Singleton”开始
春季默认情况下,所有bean都是单例的,这意味着只有一个副本存在多个引用
第二个“原型”很有趣
每次从容器请求原型作用域时,它都会返回一个差异实例,因此在春季,如果您每次使任何bean都作为原型,您将获得带有该bean自动装配属性的另一个实例
第三,关键字“ new”
这将返回新对象,具有默认值或null的属性,并且这也是未在spring Application上下文中注册的对象
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.