springmvc中的单例问题
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中的单例问题相关推荐
- Swift中编写单例的正确方式
本文由CocoaChina译者leon(社区ID)翻译自krakendev 原文:THE RIGHT WAY TO WRITE A SINGLETON 转载请保持所有内容和链接的完整性. 在之前的帖子 ...
- 在Python中创建单例
这个问题不是为了讨论是否需要单例设计模式 ,是否是反模式,还是针对任何宗教战争,而是要讨论如何以最pythonic的方式在Python中最好地实现此模式. 在这种情况下,我定义"最pytho ...
- 多个so中模板单例的多次实例化
在Android打包项目时,发现登录功能不能使用了,logcat中也没发现什么问题,最后一行一行log定位到了问题.原来是一个so文件中的构造函数被初始化二次! 这个单例是通过继承模板来实现的(暂时不 ...
- 笔记:Java中的单例设计模式
之前接触过单例模式,当初不明白这样的设计用意,今天特地研究了下java中的单例设计模式的用处及用法. 单例模式:单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.一个类 ...
- Javascript中的单例和模块模式
在javascript中,单例(singleton)就是指只有一个实例的对象,而不需要用new关键字去创建一个对象示例.单例其实有点类似于C# /C++里面的静态类.在javascript中,是以对象 ...
- spring框架中的单例Beans是线程安全的么?
看到这样一个问题:spring框架中的单例Beans是线程安全的么? Spring框架并没有对单例bean进行任何多线程的封装处理.关于单例bean的线程安全和并发问题需要开发者自行去搞定.但实际上, ...
- Spring框架中的单例Beans是线程安全的么
看到这样一个问题:Spring框架中的单例Beans是线程安全的么? Spring框架并没有对单例bean进行任何多线程的封装处理.关于单例bean的线程安全和并发问题需要开发者自行去搞定.但实际上, ...
- Spring源码 - 从缓存中获取单例Bean
# Spring源码 - 从缓存中获取单例Bean Spring版本:Spring 5.3.13-release # 1.从缓存中获取单例Bean 单实例Bean在Spring的同一个容器中只会创建一 ...
- 【单例】JAVA中的单例
单例模式,属于创建类型的一种常用的软件设计模式.通过单例模式的方法创建的类在当前进程中只有一个实例(根据需要,也有可能一个线程中属于单例,如:仅线程上下文内使用同一个实例. Java中单例模式定义:& ...
最新文章
- 如何从ATS获取客户端平均响应时间(单位,毫秒)?
- 【ruby项目,语言提交检查(一)】怎样高速学习ruby ?
- SheevaPlug是什么,有什么用途
- Oracle-1:的列操作(增加列,修改列,删除列),包括操作多列
- mysql的数据库的索引_MySQL 数据库索引原理与分类
- 用递归的方式处理数组 把递归方法方法定义到数组的原型上 (这是一次脑洞大开的神奇尝试)...
- docker(podman)命令参考
- pythonATM,购物车项目实战3-视图函数
- java用php退出清除session_PHP学习笔记:删除与销毁session
- micropython stm32源码修改_网上买了ps2手柄,按stm32 代码 改写了个micropython
- 力扣——算法入门计划第十四天
- pve虚拟化几台服务器,PVE开启嵌套虚拟化
- 拆解ONES,从ONES深挖项目研发管理机制
- MongoDB实战(MongoDB开发者现身说法)
- zabbix使用详解
- 吴晓波:谷歌亚马逊抖音拼多多,15年前就被他成功预言--长尾理论/推荐系统/数据和消费
- 法律纠纷信息检索(爬虫)
- java wrap()_Java中的CharBuffer wrap()方法
- leetcode剑指offer4
- sysbios挂钩函数使用_使用动作挂钩自定义WordPress主题