栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Controller是单例还是多例

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Controller是单例还是多例

@RestController
@RequestMapping("single")
//@Scope("prototype")
public class ControllerSingle {

    private int i = 1;

    @GetMapping("thread1")
    public Integer thread1() {
	i++;
	return i;
    }

    @GetMapping("thread2")
    public Integer thread2() {
	i++;
	return i;
    }
}

思考

1.一个用户(一个线程),调用方法1,5次,返回什么,结论:6

2.两个线程,分别调用方法1和2,5次,返回什么,结论:11

3.把注释@Scope去掉,上面两次调用返回什么,结论:都是2

为什么:没有@Scope,controller是个单例,只有一个bean对象,成员变量i,属于这个对象,线程共享,所以每次调用,不管单线程还是多线程,每次取到的都是一个bean的属性,当然是累加

如果加上注解@Scope,每次调用都会创建一个bean,就是多例的,每次拿到的对象属性都是1,返回结果都是2

参考这个兄台

Controller 是单例还是多例?怎么保证并发的安全 - 踏步 - 博客园

思考:如果项目重启,bean销毁,单例,创建bean,属性i,起始就是1,从头开始累加

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/678969.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号