springmvc中的单例问题

1,springmvc实际上是基于一个叫做DispatcherServlet的servlet的。servlet按照以往的学习经验,他是单事例多线程的。

2,springmvc中的@Controller,@Service等默认是单例的(ConfigurableBeanFactory#SCOPE_SINGLETON),多线程的。

3,如果在@Controller中存在实例变量的话,这个实例变量是被多个线程共享的,,造成线程不安全。所以不可避免的使用实例变量的时候,①,调整scope为ConfigurableBeanFactory#SCOPE_PROTOTYPE,②,将变量修饰为LocalThread。

4,最重要的一点,今天一同事说道,可以在controller中对访问作限流。我很诧异,不应该在Controller之前作限流吗?

他给出的解释为:Controller默认是单例的,并不是说会初始化很多个,而是所有的线程使用这一个,get√,声明一个局部变量Semphare,最大值为限流的大小即可。

十分感谢他。

DispatcherServlet

猜你喜欢

转载自www.cnblogs.com/voctrals/p/9168978.html