Spring MVC Controller单例陷阱
来源:互联网 发布:淘宝的聚划算怎么用 编辑:程序博客网 时间:2024/04/29 18:07
Spring MVC Controller默认是单例的:
单例的原因有二:
1、为了性能。
2、不需要多例。
1、这个不用废话了,单例不用每次都new,当然快了。
2、不需要实例会让很多人迷惑,因为spring mvc官方也没明确说不可以多例。
我这里说不需要的原因是看开发者怎么用了,如果你给controller中定义很多的属性,那么单例肯定会出现竞争访问了。
因此,只要controller中不定义属性,那么单例完全是安全的。下面给个例子说明下:
package com.lavasoft.demo.web.controller.lsh.ch5;import org.springframework.context.annotation.Scope;import org.springframework.stereotype.Controller;import org.springframework.ui.ModelMap;import org.springframework.web.bind.annotation.RequestMapping;@Controller@RequestMapping("/demo/lsh/ch5")@Scope("prototype")public class MultViewController { private static int st = 0; //静态的 private int index = 0; //非静态 @RequestMapping("/show") public String toShow(ModelMap model) { User user = new User(); user.setUserName("testuname"); user.setAge("23"); model.put("user", user); return "/lsh/ch5/show"; } @RequestMapping("/test") public String test() { System.out.println(st++ + " | " + index++); return "/lsh/ch5/test"; }}
0 | 0
1 | 1
2 | 2
3 | 3
4 | 4
改为单例的:
0 | 0
1 | 0
2 | 0
3 | 0
4 | 0
从此可见,单例是不安全的,会导致属性重复使用。
最佳实践:
1、不要在controller中定义成员变量。
2、万一必须要定义一个非静态成员变量时候,则通过注解@Scope(“prototype”),将其设置为多例模式。
转载请注明:程序员那点事 » Spring MVC Controller单例陷阱
0 0
- Spring MVC Controller单例陷阱
- Spring MVC Controller单例陷阱
- Spring MVC Controller单例陷阱
- Spring MVC Controller单例陷阱
- Spring MVC Controller单例陷阱
- Spring MVC Controller单例陷阱
- Spring MVC Controller单例陷阱
- Spring MVC Controller单例陷阱
- Spring MVC Controller单例陷阱
- Spring MVC Controller单例陷阱
- Spring MVC Controller单例陷阱
- Spring MVC Controller单例陷阱
- Spring MVC Controller单例陷阱
- (转)spring MVC controller单例陷阱
- Spring MVC Controller单例陷阱 2014-04-12 16:23:20
- SpringMVC Controller单例陷阱
- Spring的单例陷阱
- Spring MVC 使用陷阱
- ListView 中使用RadioButton实现单选
- 解决web项目无法部署到eclipse配置的本地tomcat
- MDM API - MobileIron, XenMobile
- Unity 3D中文开发技术文档
- 【mysql】mydumper多线程备份恢复
- Spring MVC Controller单例陷阱
- 刷了一天的《深入理解计算机系统》
- 分析rk代码中fb的加载及逻辑
- android图表库说明
- 点阵字的实现和Hiero工具的利用
- Lucene3实例总结
- HttpClient4 Post XML到一个服务器上
- android主题机制(二)
- Unity3D BMFont使用图片自定义字体(无需字体文件)