如何验证中春天的控制器是单例还是多例

  介绍

本篇文章为大家展示了如何验证中春天的控制器是单例还是多例,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

弹簧管理的控制器,即加入@ Controller注入的类,默认是单例的,因此建议:

1,不要在控制器中定义成员变量;(单例非线程安全,会导致属性重复使用)

2,若必须要在控制器中定义一个非静态成员变量,则通过注解@Scope (“prototype"),将其设置为多例模式。

验证代码:

包com.ausclouds.bdbsec.tjt;
  
  进口org.springframework.stereotype.Controller;
  进口org.springframework.web.bind.annotation.GetMapping;
  进口org.springframework.web.bind.annotation.RequestMapping;
  进口org.springframework.web.bind.annotation.ResponseBody;/* *
  * @author tjt
  * @time 2020-08-25
  * @desc验证控制器的单例
  */@ controller
  @ResponseBody
  @RequestMapping (“/tjt")
  公开课TestSingleController {
  
  私人长期资金=10;
  
  @GetMapping (“/test1")
  公共长testSingleOne () {=+ +钱;
  System.out.println (“/tjt/test1:钱我:“+钱);
  退货;
  }
  
  @GetMapping (“test2")
  公共长testSingleTwo () {=+ +钱;
  System.out.println (“/tjt test2:钱我:“+钱);
  退货;
  }
  
  }

首先,访问<代码> http://localhost: 8088/test1>

接着,再访问<代码> http://localhost: 8088/test2> 2>

不难看出:同一个变量,两次访问得到不同的结果,很明显是线程不安全的。

验证截图:

如何验证中春天的控制器是单例还是多例

尽量不要在控制器中定义成员变量,若必须要在控制器中定义一个非静态成员变量,则通过注解@Scope (“prototype"),将其设置为多例模式,或者是在控制器中使用ThreadLocal变量。

验证代码:

包com.ausclouds.bdbsec.tjt;
  
  进口org.springframework.context.annotation.Scope;
  进口org.springframework.stereotype.Controller;
  进口org.springframework.web.bind.annotation.GetMapping;
  进口org.springframework.web.bind.annotation.RequestMapping;
  进口org.springframework.web.bind.annotation.ResponseBody;/* *
  * @author tjt
  * @time 2020-08-25
  * @desc验证控制器的单例
  */@ controller
  @ResponseBody
  @Scope (“prototype")//将控制器设置为多例模式
  @RequestMapping (“/tjt")
  公开课TestSingleController {
  
  私人长期资金=10;
  
  @GetMapping (“/test1")
  公共长testSingleOne () {=+ +钱;
  System.out.println (“/tjt/test1:使用后@Scope钱我:“+钱);
  退货;
  }
  
  @GetMapping (“test2")
  公共长testSingleTwo () {=+ +钱;
  System.out.println (“/tjt/test2:使用后@Scope钱我:“+钱);
  退货;
  }
  
  }

在加上@Scope (“prototype")后首先,访问<代码> http://localhost: 8088/test1>

接着,再访问<代码> http://localhost: 8088/test2>

不难看出:同一个变量,两次访问得到相同的结果。

验证截图:

如何验证中春天的控制器是单例还是多例


其实,Spring bean的作用域除了上面使用的原型外,还有singleton,请求、会话和全球会话四种,其中请求、会话和全球会话主要运用在Web项目中。

    <李>单例模式:单例模式,当春天创建applicationContext容器的时候,春天会预初始化所有的该作用域实例,加上lazy-init就可以避免预处理,李 <李>原型:原型模式,每次通过getBean获取该bean就会新产生一个实例,创建后弹簧将不再对其管理,李 <李>要求:每次请求都新产生一个实例,和原型不同就是创建后,接下来的管理,春天依然在监听; <李>会话:每次会话,同上; <李>全球会话:全局的网络域类似于servlet中的应用。

上述内容就是如何验证中春天的控制器是单例还是多例,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

如何验证中春天的控制器是单例还是多例