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

时间:2018-06-12 02:03:46

标签: spring spring-mvc

关于SpringMVC Controller单例 然后多个线程在同一个Controller类中请求相同的方法, 线程是否安全? 如果安全然后什么时候我们会使用“原型范围”? 因为单身人士非常好

1 个答案:

答案 0 :(得分:0)

在讨论bean范围时,Spring文档声明:

  

...对所有有状态bean使用原型范围,对无状态bean使用单例范围。

  1. 原型范围控制器具有状态。
  2. 是的,控制器的局部变量(在方法中声明的那些)是线程安全的,但是它的实例变量(类级变量)不在单例范围的bean中。如果要将状态保持在控制器级别,请使用原型范围。

    此外,当控制器依赖于原型范围的bean时,事情会变得复杂。一旦设置了依赖关系,一旦创建了一个新的原型范围的bean,就不会重置它,从而在一开始就破坏了原型范围内的bean依赖关系的目的。

      

    您不能将原型范围的bean依赖注入到您的单例bean中,因为当Spring容器实例化单例bean并解析并注入其依赖项时,该注入只发生一次。如果您需要在运行时多次使用原型bean的新实例,请参阅方法注入。

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

    1. 原型范围控制器允许您拥有真正的原型范围的bean依赖关系,而不必处理CGLIB代理和方法注入。
    2. 但是,请考虑使用原型范围控制器可能会降低应用程序的性能。