<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成人精品日韩一区18p| 亚洲色偷偷综合亚洲av78| 美女隐私免费视频看| 日本免费的一级v一片| 亚洲午夜精品久久久久久app| 青青青国产手机频在线免费观看| 国产亚洲精aa成人网站| 国产伦精品一区二区免费| 亚洲国产精品VA在线观看麻豆| 成在线人视频免费视频| 亚洲精品无码国产| 老汉精品免费AV在线播放| 亚洲熟妇av一区二区三区下载| 中文字幕在线免费| 亚洲综合伊人制服丝袜美腿| 18禁超污无遮挡无码免费网站国产 | 国产人在线成免费视频| 亚洲高清视频免费| 日韩av无码久久精品免费| 亚洲日本视频在线观看| 成年女人18级毛片毛片免费观看| 亚洲精品伊人久久久久| 亚洲 综合 国产 欧洲 丝袜 | 亚洲视频免费在线看| 免费无码A片一区二三区| 国产成人精品久久亚洲高清不卡| 国产成人免费a在线视频app| 在线观看免费视频一区| 亚洲精品中文字幕乱码| 午夜老司机免费视频| 国产精品内射视频免费| 亚洲校园春色小说| 五月婷婷亚洲综合| 精品无码人妻一区二区免费蜜桃| 亚洲免费二区三区| 在线精品亚洲一区二区三区| 91精品免费在线观看| 无码AV动漫精品一区二区免费| 国产AV无码专区亚洲AV毛网站 | 亚洲成A∨人片在线观看不卡 | 性做久久久久免费看|