黑马程序员技术交流社区
标题:
[杭州校区]SpringMVC Controller单例和多例区别
[打印本页]
作者:
小江哥
时间:
2018-9-21 14:35
标题:
[杭州校区]SpringMVC Controller单例和多例区别
springmvc是基于方法的开发,都是用形参接收值,一个方法结束参数就销毁了,多线程访问都会有一块内存空间产生,
里面的参数也是不会共用的,所有springmvc默认使用了单例,所以controller里面不适合在类里面定义属性。
如果在特殊情况需要定义属性的时候,那么就在类上面加上注解@Scope("prototype")改为多例的模式。
多例模式:
@Controller
@Scope
(
"prototype"
)
public
class
ItemController {
private
int
a;
private
static
int
b;
@RequestMapping
(
"getHelloWolrd"
)
@ResponseBody
private
String getHelloWorld(){
System.
out
.println(
"普通属性a = "
+ a++);
System.
out
.println(
"静态属性b = "
+ b++);
return
"Hello World"
;
}
/*
* 多次访问输出结果为:
* 普通属性a = 0 静态属性b = 0
* 普通属性a = 0 静态属性b = 1
* 普通属性a = 0 静态属性b = 2
* 普通属性a = 0 静态属性b = 3
* 普通属性a = 0 静态属性b = 4
*/
}
单例模式:
@Controller
@Scope
(
"singleton"
)
public
class
ItemController {
private
int
a;
private
static
int
b;
@RequestMapping
(
"getHelloWolrd"
)
@ResponseBody
private
String getHelloWorld(){
System.
out
.println(
"普通属性a = "
+ a++);
System.
out
.println(
"静态属性b = "
+ b++);
return
"Hello World"
;
}
/*
* 多次访问输出结果为:
* 普通属性a = 0 静态属性b = 0
* 普通属性a = 1 静态属性b = 1
* 普通属性a = 2 静态属性b = 2
* 普通属性a = 3 静态属性b = 3
* 普通属性a = 4 静态属性b = 4
*/
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2