繁体   English   中英

具有作用域原型的bean和单例bean中的新Object有什么区别?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM