<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

    主站蜘蛛池模板: **aaaaa毛片免费| 久久免费国产视频| 午夜成年女人毛片免费观看| 亚洲精品成人图区| 国产四虎免费精品视频| 亚洲一级毛片免费观看| 色妞WWW精品免费视频| 亚洲精品中文字幕| 亚洲国产成人久久综合区| 国产成人无码精品久久久免费| 亚洲日本韩国在线| 全黄大全大色全免费大片| 亚洲狠狠久久综合一区77777| 色欲色香天天天综合网站免费 | 国产精品久久久久影院免费| 亚洲第一se情网站| 亚洲色偷偷综合亚洲AV伊人| 中国一级特黄的片子免费| 亚洲AV无码码潮喷在线观看| 国产人成免费视频网站| 男人天堂2018亚洲男人天堂| 国产精品无码一二区免费| 一个人看的www视频免费在线观看| 亚洲精品乱码久久久久久中文字幕 | 亚洲AV性色在线观看| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 亚洲国产av一区二区三区| 国产午夜成人免费看片无遮挡| 亚洲白嫩在线观看| 国产麻豆免费观看91| 国产久爱免费精品视频| 麻豆亚洲AV永久无码精品久久| 99视频在线精品免费观看6| 成人免费网站久久久| 亚洲五月六月丁香激情| 浮力影院第一页小视频国产在线观看免费 | 2021精品国产品免费观看| 精品在线免费视频| 亚洲毛片免费观看| 国产精品亚洲综合一区| 黄在线观看www免费看|