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

Servlet生命周期

1.装载Servlet。这项操作一般是动态执行的。然而,Server通常会提供一个管理的选项,用于在Server启动时强制装载和初始化特定的Servlet。
2.Server创建一个Servlet的实例
3.Server调用Servlet的init()方法
4.一个客户端的请求到达Server
5.Server创建一个请求对象
6.Server创建一个响应对象
7.Server激活Servlet的service()方法,传递请求和响应对象作为参数
8.service()方法获得关于请求对象的信息,处理请求,访问其他资源,获得需要的信息
9.service()方法使用响应对象的方法,将响应传回Server,最终到达客户端。service()方法可能激活其它方法以处理请求,如doGet()或doPost()或程序员自己开发的新的方法。
10.对于更多的客户端请求,Server创建新的请求和响应对象,仍然激活此Servlet的service()方法,将这两个对象作为参数传递给它。如此重复以上的循环,但无需再次调用init()方法。一般Servlet只初始化一次(只有一个对象),当Server不再需要Servlet时(一般当Server关闭时),Server调用Servlet的Destroy()方法。

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

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

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

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

十分感谢他。

DispatcherServlet

转载于:https://www.cnblogs.com/voctrals/p/9168978.html

springmvc中的单例问题相关推荐

  1. Swift中编写单例的正确方式

    本文由CocoaChina译者leon(社区ID)翻译自krakendev 原文:THE RIGHT WAY TO WRITE A SINGLETON 转载请保持所有内容和链接的完整性. 在之前的帖子 ...

  2. 在Python中创建单例

    这个问题不是为了讨论是否需要单例设计模式 ,是否是反模式,还是针对任何宗教战争,而是要讨论如何以最pythonic的方式在Python中最好地实现此模式. 在这种情况下,我定义"最pytho ...

  3. 多个so中模板单例的多次实例化

    在Android打包项目时,发现登录功能不能使用了,logcat中也没发现什么问题,最后一行一行log定位到了问题.原来是一个so文件中的构造函数被初始化二次! 这个单例是通过继承模板来实现的(暂时不 ...

  4. 笔记:Java中的单例设计模式

    之前接触过单例模式,当初不明白这样的设计用意,今天特地研究了下java中的单例设计模式的用处及用法. 单例模式:单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.一个类 ...

  5. Javascript中的单例和模块模式

    在javascript中,单例(singleton)就是指只有一个实例的对象,而不需要用new关键字去创建一个对象示例.单例其实有点类似于C# /C++里面的静态类.在javascript中,是以对象 ...

  6. spring框架中的单例Beans是线程安全的么?

    看到这样一个问题:spring框架中的单例Beans是线程安全的么? Spring框架并没有对单例bean进行任何多线程的封装处理.关于单例bean的线程安全和并发问题需要开发者自行去搞定.但实际上, ...

  7. Spring框架中的单例Beans是线程安全的么

    看到这样一个问题:Spring框架中的单例Beans是线程安全的么? Spring框架并没有对单例bean进行任何多线程的封装处理.关于单例bean的线程安全和并发问题需要开发者自行去搞定.但实际上, ...

  8. Spring源码 - 从缓存中获取单例Bean

    # Spring源码 - 从缓存中获取单例Bean Spring版本:Spring 5.3.13-release # 1.从缓存中获取单例Bean 单实例Bean在Spring的同一个容器中只会创建一 ...

  9. 【单例】JAVA中的单例

    单例模式,属于创建类型的一种常用的软件设计模式.通过单例模式的方法创建的类在当前进程中只有一个实例(根据需要,也有可能一个线程中属于单例,如:仅线程上下文内使用同一个实例. Java中单例模式定义:& ...

最新文章

  1. 如何从ATS获取客户端平均响应时间(单位,毫秒)?
  2. 【ruby项目,语言提交检查(一)】怎样高速学习ruby ?
  3. SheevaPlug是什么,有什么用途
  4. Oracle-1:的列操作(增加列,修改列,删除列),包括操作多列
  5. mysql的数据库的索引_MySQL 数据库索引原理与分类
  6. 用递归的方式处理数组 把递归方法方法定义到数组的原型上 (这是一次脑洞大开的神奇尝试)...
  7. docker(podman)命令参考
  8. pythonATM,购物车项目实战3-视图函数
  9. java用php退出清除session_PHP学习笔记:删除与销毁session
  10. micropython stm32源码修改_网上买了ps2手柄,按stm32 代码 改写了个micropython
  11. 力扣——算法入门计划第十四天
  12. pve虚拟化几台服务器,PVE开启嵌套虚拟化
  13. 拆解ONES,从ONES深挖项目研发管理机制
  14. MongoDB实战(MongoDB开发者现身说法)
  15. zabbix使用详解
  16. 吴晓波:谷歌亚马逊抖音拼多多,15年前就被他成功预言--长尾理论/推荐系统/数据和消费
  17. 法律纠纷信息检索(爬虫)
  18. java wrap()_Java中的CharBuffer wrap()方法
  19. leetcode剑指offer4
  20. sysbios挂钩函数使用_使用动作挂钩自定义WordPress主题

热门文章

  1. 大型网站系统与Java中间件实践pdf
  2. 软件工程课设-----日程管理系统
  3. Synergy如果timeout的可能原因
  4. ASP.NET应用程序客户端执行的优化小技巧
  5. Windows10电脑系统时间校准
  6. CountDownLatch线程同步辅助
  7. java开发过程中的命名规范
  8. apple mach-o linker (id) error
  9. Find命令使用详解
  10. 各种URL生成方式的性能对比