我正在考虑@scope("prototype")
范围,但我没有得到,因为我们已经有了new
关键字。它们都在运行时创建对象的新实例。使用prototype
有什么好处?重新分配比使用new
更容易吗?使用new
关键字创建新对象时,我做错什么了吗?
我试图了解它的优点。
我发现了这个问题,但没有解释new
和prototype
:What is the difference between bean with scope prototype and new Object in singleton bean?
答案 0 :(得分:1)
通过使用new
关键字,您正在创建一个Java对象,但它不是spring bean,并且不会出现在spring容器中。但是,如果对每个请求都使用@scope("prototype")
,则会提供一个新的spring bean。更多information
什么是四季豆?
Spring bean本质上是由Spring管理的对象。更具体地说,它是一个由Spring Framework容器实例化,配置和管理的对象。 Spring bean是在Spring配置文件中定义的(或者,最近通过使用批注),由Spring容器实例化,然后注入到您的应用程序中。
春豆的优势?
1)默认情况下,所有spring bean都是不可变的,spring IOC容器将对其进行管理
2)通过使用依赖注入,您可以轻松地将bean注入任何其他对象
3)依赖注入使测试更加容易。注入可以通过构造函数完成。
4)如果您使用的是spring boot,则可以使用application.yml
批注
application.properties
或@Value
中的值注入spring bean中。
答案 1 :(得分:1)
很简单。在某些情况下,每个bean中可能需要单独的实例。这几乎等同于在需要时使用new
进行创建,只是您可以将依赖项注入到您标记为原型的任何对象上。
答案 2 :(得分:1)
例如,您有一个令牌,应该消耗一次,因此,由于这个原因,每次新实例创建到应用程序上下文时,您都可以使用此类型。
答案 3 :(得分:0)
使用Spring的主要好处之一是,它无需直接通过new
实例化对象,而是将对象创建为Spring组件/ bean并在Spring Application Context中注册-这导致了软件组件可通过注入相互组合在一起,从而使单元测试更加轻松,软件更加灵活。
spring原型作用域意味着每次在Spring应用程序上下文中需要和注册spring组件时,都会创建一个spring组件的新实例(由spring运行时/容器)。最终,Spring会创建一个对象,并将其像其他任何对象一样存储在堆上,但是Spring Container提供的抽象层在能够定义和“连接”软件组件方面比使用裸{{1 }}在其他对象中创建对象。