<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成人精品日韩一区| 亚洲国产精品尤物YW在线观看| 性无码免费一区二区三区在线| avtt天堂网手机版亚洲| 亚洲伦乱亚洲h视频| 中文字幕亚洲免费无线观看日本| 无码天堂va亚洲va在线va| 久久精品亚洲中文字幕无码网站| 99re热免费精品视频观看| 香蕉免费一级视频在线观看| 亚洲无人区视频大全| 无码欧精品亚洲日韩一区夜夜嗨| 四虎影视在线影院在线观看免费视频 | 中文无码日韩欧免费视频| 亚洲精品免费在线观看| 国产精品国产午夜免费福利看 | 亚洲中文字幕无码爆乳AV| A在线观看免费网站大全| 十八禁视频在线观看免费无码无遮挡骂过 | 亚洲AV无码久久精品成人| 免费毛片在线看片免费丝瓜视频 | 一级做a爱片特黄在线观看免费看| 亚洲欧洲自拍拍偷综合| 亚洲国产小视频精品久久久三级| 69成人免费视频| ww在线观视频免费观看w| 亚洲国产成人久久综合| 综合自拍亚洲综合图不卡区| 久久精品国产亚洲一区二区三区| 国产在线观看片a免费观看| 国产永久免费高清在线| 色爽黄1000部免费软件下载| 国产精品亚洲精品| 91亚洲精品视频| 国产AV无码专区亚洲AVJULIA| 亚洲av无码专区在线观看素人| 国产情侣激情在线视频免费看| 久久黄色免费网站|