<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Chan Chen Coding...

    spring mvc singleton的驗證

    用了Spring MVC有一個多月了,之前雖然有接觸過一些,但是一直沒有在實際工作中使用。今天和同事聊起,談到Spring MVC中的Controller是單例實現的,于是就寫了一段代碼驗證一些。

    1. 如果是單例的,那么在Controller類中的實例變量應該是共享的,如果不共享,則說明不是單例。
    直接代碼:
    @Controller
    public class DemoAction {

        private int  i = 0;

        @RequestMapping(value = "/singleton")
        @ResponseBody
        public String singleton(HttpServletRequest request, HttpServletResponse response) throws InterruptedException {
            int addInt = Integer.parseInt(request.getParameter("int"));
            i = i + addInt;
            return String.valueOf(i);
        }
    }

    分別三次請求: localhost:8080/projectname/singleton?int=5
    得到的返回結果如下。
    第一次: i=5
    第二次: i=10
    第三次: i=15

    重結果可以得知,i的狀態是共享的,因此Controller是單例的。

    -------------------------------------------------------------------------------------------------------------------------
    2. 如果是單例,那么多個線程請求同一個Controller類中的同一個方法,線程是否會堵塞?
    驗證代碼如下:
        @RequestMapping(value = "/switcher")
        @ResponseBody
        public String switcher(HttpServletRequest request, HttpServletResponse response)
                throws InterruptedException {
            String switcher = request.getParameter("switcher");
            if (switcher.equals("on")) {
                Thread.currentThread().sleep(10000);
                return "switch on";
            } else {
                return switcher;
            }
        }

    驗證方法:
    分別發送兩個請求,
    第一個請求:localhost:8080/projectname/singleton?switcher=on
    第二個請求:localhost:8080/projectname/singleton?switcher=everything

    驗證結果:
    第一個請求發出去以后,本地服務器等待10s,然后返回結果“switch on”,
    在本地服務器等待的者10s當中,第二期的請求,直接返回結果“everything”。說明之間的線程是不互相影響的。
    -------------------------------------------------------------------------------------------------------------------------
    3.既然Controller是單例的,那么Service是單例的嗎?驗證方法和Controller的單例是一樣的。
    驗證代碼:
    Controller:
    @Controller
    public class DemoAction {

        @Resource
        private DemoService demoService;

        @RequestMapping(value = "/service")
        @ResponseBody
        public String service(HttpServletRequest request, HttpServletResponse response)
                throws InterruptedException {
            int result = demoService.addService(5);
            return String.valueOf(result);
        }
    }
        
    Service:
    @Service
    public class DemoService {
        private int i = 0;
        public int addService(int num){
            i = i + num;
            return i;
        }
    }

    分別三次請求: localhost:8080/projectname/service
    得到的返回結果如下。
    第一次: i=5
    第二次: i=10
    第三次: i=15

    重結果可以得知,i的狀態是共享的,因此Service默認是單例的。
    -------------------------------------------------------------------------------------------------------------------------
    相同的驗證方法,可以得出@Repository的DAO也是默認單例。







    -----------------------------------------------------
    Silence, the way to avoid many problems;
    Smile, the way to solve many problems;

    posted on 2013-05-05 13:49 Chan Chen 閱讀(671) 評論(0)  編輯  收藏 所屬分類: Scala / Java

    主站蜘蛛池模板: 久久久久亚洲av无码专区| 亚洲JIZZJIZZ中国少妇中文| 婷婷久久久亚洲欧洲日产国码AV| 一区二区三区免费高清视频| 亚洲av无码成人精品区在线播放| 亚洲s码欧洲m码吹潮| 免费无码成人AV片在线在线播放| 亚洲精品久久无码av片俺去也| 在线观看免费污视频| 久久综合亚洲色hezyo| 亚洲av高清在线观看一区二区| 亚洲a∨无码一区二区| 亚洲A丁香五香天堂网| 美女网站在线观看视频免费的| 亚洲色爱图小说专区| 99久久免费精品高清特色大片| 久久久久亚洲AV无码观看| 最近最新的免费中文字幕| 美女视频黄频a免费大全视频| 久久夜色精品国产亚洲av| 中文字幕无码免费久久| 亚洲另类小说图片| 国产成人免费网站在线观看| 一级毛片免费播放视频| 亚洲欧洲国产日韩精品| 女人被男人躁的女爽免费视频| 特黄特色大片免费| 亚洲国产综合专区电影在线| 噼里啪啦电影在线观看免费高清| 亚洲成av人片在线天堂无| 亚洲午夜无码久久久久| 久久经典免费视频| 一级毛片大全免费播放下载| 亚洲综合成人网在线观看| 大学生a级毛片免费观看 | 国产福利视精品永久免费| 理论片在线观看免费| 久久精品国产亚洲av水果派| 国产成人无码区免费A∨视频网站| 国产一区二区三区免费观在线| 亚洲一区二区三区亚瑟|