何时使用弹簧原型示波器?

2022-08-31 22:14:16

我想知道在春季我应该何时使用示波器?我已经理解,如果请求bean,则返回相同的对象实例。prototypesingleton

那么我们为什么要考虑呢?prototype

用例子解释将大大有助于理解它的必要性。


答案 1

要清楚简单的定义:

  • 原型作用域 = 每次注入/查找新对象时都会创建一个新对象。它每次都会使用新的。SomeBean()

  • 单例作用域 = 每次注入/查找时都会返回相同的对象。在这里,它将实例化一个实例,然后每次都返回它。SomeBean

原型豆是在使用时创建的。因此,当您希望拥有有状态的bean时,有时非常需要具有原型范围,或者当您不想在bean中缓存任何值时。原型 Bean 可以与一个会话或某个调用相关联。

例:

数据访问对象 (DAO) 通常不配置为原型,因为典型的 DAO 不保存任何会话状态。对于本文作者来说,重用单例图的核心更容易。


答案 2

通过使用范围原型,您将构建一个更好,更可靠的应用程序设计/体系结构,例如,实时系统,有一些有趣的用例。

想象一下,您必须构建一个用于车辆跟踪的实时系统,并且每5秒将有2.000.000辆汽车共享信息,在服务器端,您将使用两个或多个不同的配置组,一个用于汽车,另一个用于卡车。

基于这个简单的示例,如果将应用程序设计为通过原型模式使用内存中的不同配置组,则将获得更好的性能。

因此,在这种情况下,每当服务器收到来自卡车的新消息时,例如,服务器将从 VehicleGrupConfiguration 实例的哈希图中获取内存中的配置实例,然后应用此消息必须具有的配置行为,例如:超时,重试...等等。

我想强调的是,有很多方法可以实现这种情况,但是这个例子表明,原型模式在性能和设计模式方面非常强大。