黑马程序员技术交流社区

标题: [杭州校区]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