<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

    主站蜘蛛池模板: 亚洲不卡中文字幕无码| 日韩在线不卡免费视频一区| 久久综合亚洲色HEZYO社区| 又粗又硬又黄又爽的免费视频| 100000免费啪啪18免进| 久久精品国产大片免费观看| 一级毛片免费在线| 国产精品亚洲а∨无码播放麻豆| 亚洲国产综合在线| 久久国产亚洲精品无码| 亚洲精品无码mv在线观看网站| www.亚洲色图.com| 国产精品99久久免费| 91情侣在线精品国产免费| 亚洲视频免费播放| 日韩精品无码专区免费播放| 成人无码a级毛片免费| 中文字幕无线码中文字幕免费| 青青草97国产精品免费观看| 亚洲AV无码国产一区二区三区| 国产亚洲精品影视在线| 激情综合亚洲色婷婷五月APP| 久久久久久亚洲精品成人| 亚洲av无码av制服另类专区| 中文字幕亚洲无线码a| 伊人久久综在合线亚洲91| 国产精品V亚洲精品V日韩精品| www.亚洲精品.com| 国产亚洲精品看片在线观看| 国产成人99久久亚洲综合精品| 亚洲午夜av影院| 亚洲中文久久精品无码| 国产成A人亚洲精V品无码性色| 亚洲国产AV无码专区亚洲AV| 亚洲成AV人片在线播放无码| 久久久久亚洲精品美女| 夜夜亚洲天天久久| 亚洲国产成人久久综合一区| 亚洲中文字幕一二三四区苍井空 | 色吊丝性永久免费看码| 少妇亚洲免费精品|