java何时使用Spring原型范围?
我想知道我应该在春天什么时候使用prototype
范围?我已经理解,如果请求bean,那么singleton
返回相同的对象实例
那么我们为什么要考虑{< CD1>}?
举例说明将有助于理解其必要性
你可以在下面搜索框中键入要查询的问题!
我想知道我应该在春天什么时候使用prototype
范围?我已经理解,如果请求bean,那么singleton
返回相同的对象实例
那么我们为什么要考虑{< CD1>}?
举例说明将有助于理解其必要性
# 1 楼答案
简单明了的定义如下:
Prototype scope=每次注入/查找时都会创建一个新对象。每次都会使用新的
SomeBean()
Singleton scope=每次注入/查找同一对象时都返回该对象。在这里,它将实例化
SomeBean
的一个实例,然后每次返回它原型bean是在使用时创建的。因此,当您想要有状态bean时,有时强烈需要有原型作用域,或者当您不想在bean中缓存任何值时。原型bean可以与一个会话或一些调用相关联
例如:
数据访问对象(DAO)通常不配置为原型,因为典型的DAO不包含任何对话状态;对于这位作者来说,重用单例图的核心更容易
# 2 楼答案
正如文档所述,创建具有原型范围的bean Foo与调用:
使用prototype scope bean而不是
new
的唯一好理由是,用于创建和初始化实例的依赖项应该保持在需要新实例的代码之外例如:
例如,如果您想编写类似于EJB2 Java实体bean的持久性代码,例如
而不是用JPA的方式
在实体bean代码样式中,person实例需要知道应该如何持久化,因此需要向它注入持久化细节,而编写代码的人不应该知道这些细节
另一个例子: 如果希望在应用程序的许多地方使用非线程安全的SimpleDataFormat Java类,并使用配置文件中的格式模式(可能根据其他条件使用不同的格式)。您可以使用prototype作用域每次都获取一个新的实例,而不是在所有这些地方创建一个新的format实例,同时从文件(或spring属性)加载格式化字符串,并在一个地方设置公共格式的细节