spring中的controller

Q: Spring中的Controller是单例还是多例?

A: 默认情况下是单例的,可以通过注解@Scope(“xxx”)来改变。

因为是单例的,所以会出现线程安全问题,建议:

  1. 不要在Controller中定义成员变量。
  2. 如果必须要定义一个非静态成员变量时候,可以通过注解@Scope(“prototype”),将其设置为多例模式。
  3. 在Controller中使用ThreadLocal变量。

Extend

spring bean作用域有以下5个:
singleton: 单例模式,当spring创建applicationContext容器的时候,spring会欲初始化所有的该作用域实例,加上lazy-init就可以避免预处理;
prototype: 原型模式,每次通过getBean获取该bean就会新产生一个实例,创建后spring将不再对其管理;
(下面是在web项目下才用到的)
request: 搞web的大家都应该明白request的域了吧,就是每次请求都新产生一个实例,和prototype不同就是创建后,接下来的管理,spring依然在监听;
session: 每次会话,同上;
global session: 全局的web域,类似于servlet中的application。


如有雷同,纯属巧合,请私信本人进行删除!

你可能感兴趣的:(java技术)