Spring MVC 我应该什么时候使用 Scope( "prototype" )?



关于SpringMVC Controller singleton 然后多个线程在同一控制器类中请求相同的方法, 线程是否安全? 如果安全,那么我们什么时候会使用"原型示波器"? 因为单例太好了

在讨论 bean 范围时,Spring 文档指出:

。对所有有状态 Bean 使用原型作用域,对无状态 Bean 使用单例作用域。

  1. 原型范围的控制器具有状态。

是的,控制器的局部变量(在方法中声明的变量(是线程安全的,但它的实例变量(类级变量(不在单例范围的 Bean 中。如果要将状态保留在控制器级别,请使用原型作用域。

此外,当控制器依赖于原型范围的 bean 时,事情会变得复杂。一旦设置了依赖关系,一旦创建了一个新的原型范围的 Bean,它就不会被重置,这违背了首先拥有原型范围的 Bean 依赖的目的。

您不能将原型范围的 Bean 依赖注入到单例 Bean

中,因为该注入只发生一次,即当 Spring 容器实例化单例 Bean 并解析和注入其依赖项时。如果在运行时多次需要原型 Bean 的新实例,请参阅方法注入。

您可能需要小心方法注入,因为它是一项相当高级的功能。那么有人可能想要使用原型范围的控制器的另一个原因?

    原型范围的
  1. 控制器允许您拥有真正的原型范围的 Bean 依赖项,而不必处理 CGLIB 代理和方法注入。

但是,请考虑使用原型范围的控制器对应用程序可能造成的性能影响。

最新更新