何时使用Spring原型范围?

我想知道我什么时候应该在Spring中使用prototype范围? 我已经理解,如果请求bean, singleton将返回相同的对象实例。

那我们为什么要考虑prototype

通过示例进行解释将有助于理解对它的需求。

要明确简单的定义:

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

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

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

例:

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

有一些有趣的用例,使用范围原型,您将在您的应用程序中拥有更好,更可靠的设计/架构,例如,实时系统。

想象一下,您必须构建一个实时的车辆跟踪系统,并且您将拥有每5秒钟共享信息的2.000.000辆汽车。在服务器端,您将使用两个或更多不同的组配置,一个用于汽车和另一个一个用于卡车。 有了这个简单的场景,如果您将应用程序设计为在内存中使用不同的配置组,您将获得更高的性能。

因此,在这种情况下,当服务器从Truck接收到新消息时,例如服务器将从类VehicleGrupConfiguration获取内存中的配置,然后应用此消息应该是哪种行为,如超时,重试…当然,有很多方法可以实现这种情况,但是通过这个简单的示例,您可以实现处理此配置的良好方案。