Spring的Controller是怎么保证并发的安全
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,Spring的Controller是怎么保证并发的安全,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Controller 默认是单例
千家信息网最后更新 2026年11月01日Spring的Controller是怎么保证并发的安全
Spring的Controller是怎么保证并发的安全,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
Controller 默认是单例的,不要使用非静态的成员变量,否则会发生数据逻辑混乱。正因为单例所以不是线程安全的。
我们下面来简单的验证下:
package com.xttblog.springbootdemo.controller;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* @author 业余草,公众号
*/
@Controller
public class ScopeTestController {
private int num = 0;
@RequestMapping("/testScope")
public void testScope() {
System.out.println(++num);
}
@RequestMapping("/testScope2")
public void testScope2() {
System.out.println(++num);
}
}
我们首先访问 http://localhost:8080/testScope,得到的答案是1。
然后我们再访问 http://localhost:8080/testScope2,得到的答案是 2。
得到的不同的值,这是线程不安全的。
接下来我们再来给controller增加作用多例 @Scope("prototype")。
package com.xttblog.springbootdemo.controller;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* @author 业余草,公众号
*/
@Controller
@Scope("prototype")
public class ScopeTestController {
private int num = 0;
@RequestMapping("/testScope")
public void testScope() {
System.out.println(++num);
}
@RequestMapping("/testScope2")
public void testScope2() {
System.out.println(++num);
}
}
我们依旧首先访问 http://localhost:8080/testScope,得到的答案是 1。
然后我们再访问 http://localhost:8080/testScope2,得到的答案还是 1。
相信大家不难发现:
❝单例是不安全的,会导致属性重复使用。
❞
解决方案
不要在 Controller 中定义成员变量。 万一必须要定义一个非静态成员变量时候,则通过注解 @Scope("prototype"),将其设置为多例模式。 在 Controller 中使用 ThreadLocal 变量
补充说明
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。
关于Spring的Controller是怎么保证并发的安全问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。
安全
变量
答案
作用
实例
成员
模式
问题
保证
不同
接下来
公众
就是
新产
时候
更多
线程
静态
帮助
管理
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网的科技
互联网 科技公司
互联网金融 科技金融
合肥互联网科技公司
万易互联网科技
互联网科技论文
未来的互联网科技
银优互联网科技有限公司
时间互联网络科技
互联网金融科技委员会
互联网和高科技公司
栖莱科技互联网股份有限公司
玉溪互联网科技怎么选
链环科技传统企业怎么转型互联网
内蒙古九一互联网科技
上海互联网科技公司ppt
广州互联网高科技取餐柜
山东大美朱楼互联网科技有限公司
互联网科技的前景
广州全民伙伴互联网科技有限公司
耶加雪菲
美国互联网保险保险科技
科技平台互联网
科技信息互联网
奇酷互联网络科技公司
时间互联网络科技
富国互联网科技创新基金
每天都有哪些好的互联网科技
卡尔迅互联网科技有限公司
张家口科技产业互联网平台