A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

    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
         */
}


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马