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

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

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

    當Endisoft愛上了JAVA
    I believe I can fly,I can touch the sky
    posts - 4,  comments - 1,  trackbacks - 0
    有人說spring?aop+?spring?ioc,?才~~~是spring
    簡單一點,是一個容器.?什么容器,容納什么?是對象,或者說bean的容器.
    那為什么叫輕量級容器呢?相對于EJB?container,使用spring不需要寫符合容器規范的代碼,即容器不會"侵入"了你的代碼.

    這個容器會提供你的應用(程序)中用到的所有對象,并對這些對象進行統一的生命周期管理和組裝.在通常的開發中,我們在需要某個對象的時候只是?new?MyObject().?在Java中,這樣沒有什么不好,因為gc會打理好"善后"工作,是系統級的.?而用spring,在需要某個對象時,只要向容器請求相應的對象,spring會找到并準備好這些對象并提供給你.她也會打理好"善后"工作,但是是在應用級的.
    另一方面,spring還會幫助你打理對象之間的依賴關系.
    比如原來的做法:

    class?A{
    }
    class?B{
    ??A?a?;
    ??public?B(){?a?=?new?A();}
    }

    而使用spring的做法
    class?A{
    }
    class?B{
    ??A?a;
    ??public?B(){}
    ??void?setA(A?a){this.a=a}
    ??A?getA(){return?this.a}
    }
    (希望你不要單純地認為spring會寫很多代碼)
    但從前一個方面,你可能覺得spring只是一個對象容器.從這里你就應該看出,spring是bean容器,因為spring需要你的類符合bean規范:相應于每一個成員域,都需要提供setter和getter方法.spring要使用這些方法來注入依賴關系,也就是?dependence?injection,?或者inversion?of?control.?我個人覺得還是di更容易理解,直到現在我還是要考慮怎么去向別人很好的解釋ioc.控制反轉(倒轉),我的理解是就如同上面的兩個例子里看到的,依賴(控制)不在體現在代碼邏輯里(如第一個例子),而是在配置文件里,而在代碼中我們只提供注入點(也就是setter和getter).

    希望我對IoC的概念的講解能夠給你一些啟發.
    你可能要問了,為什么我要這樣做呢?原來的做法有什么不妥的地方么?沒有什么不妥,只是兩種理念而已,沒有絕對的好還是不好,但我還是給你我的解釋--我理解的IoC的好處,希望有所幫助.通常在程序設計的時候,我們在需要某些功能時,會相應的去設計一些方法,然后根據OO去將方法和一成員變量組成一個類.實際上,我們最終設計出的程序是:一組類的實例互相交互完成某個特定的任務.
    除了一些核心的業務方法,以外我們還要做組裝對象的工作.比如我有了一個工廠,里面有很多機器,機器在開動時要裝配相應的模具.那么在工廠的生產過程中,?首先我要有工廠,機器,模具這樣三個類.然后我的"動作"有:裝配,開機.通常的做法我們要做裝配,然后再去開機.而用spring,我們只是專注于開機.這樣我們就把裝配這個動作抽離出了核心的"生產過程".當某些機器改變了裝配模具時,不在需要修改核心業務代碼.這就是解耦.如:

    public?class?Production{
    ??public?static?void?main(String[]?args){
    ????Factory?factory?=?(Factory)BeanFactory.getBean("factory");
    ????factory.launchProduction();
    ??}
    }

    class?Factory{
    ??Machine?machine1,machine2;
    ??void?launchProduction(){
    ?????machine1.start();?machine2.start();
    ??}
    ??//?setters?and?getters
    }

    class?Machine{
    ??Tool?tool;
    ??void?start(){
    ??}
    ??//?setters?and?getters
    }

    在launchProduction()方法中只需要開動每臺機器即可.而不需要每次都裝配機器.裝配的工作交給了別人.現在只要按下start按鈕.生產就開始了!要是原來:

    void?launchProduction(){
    ??machine1?=?new?MachineA();
    ??machine1.setTool(new?ToolA());
    ??machine2?=?new?MachineB();
    ??machine2.setTool(new?ToolB());
    ??machine1.start();
    ??machine2.start();
    }

    這就是工作分工,是不是感覺輕松了許多?從此以后,我們都是面向構件去開發,而不需要過多地在代碼中體現構件之間的依賴關系.

    AOP
    推薦你看一下<<effective?enterprise?java>>的第一章,對AOP有很清晰,易懂的解釋.其實AOP并非很艱深晦澀的概念,但是從架構角度去理解她的重要性可能不是我這樣的new?fish一時半會兒可以領悟到的.
    我這里只是想說,有些概念你要知道是怎么回事,但理解到多深,除了天賦以外更多的是經驗和悟.所以不要心急.--像是在自我解嘲.
    也許在不知不覺中你就使用了很多AOP的概念,比如servlet里的filter,比如在寫一個command類時,給她的調用類在每次調用command時前后加上:preProcess和postProcess...
    我不想解釋太多,<<eej>>的解釋已經足夠.
    posted on 2006-09-26 23:31 Endisoft 閱讀(1190) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    <2006年9月>
    272829303112
    3456789
    10111213141516
    17181920212223
    24252627282930
    1234567

    常用鏈接

    留言簿(1)

    隨筆檔案(4)

    文章分類(5)

    文章檔案(3)

    類的初始化

    最新隨筆

    搜索

    •  

    積分與排名

    • 積分 - 5184
    • 排名 - 3050

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 日韩精品免费一级视频| 三年片在线观看免费观看大全动漫| 国产曰批免费视频播放免费s | 99久久免费看国产精品| 亚洲精品狼友在线播放| 国产免费高清69式视频在线观看| 国产一级一片免费播放| 美女黄频a美女大全免费皮| 国产网站免费观看| 理论片在线观看免费| 亚洲成人影院在线观看| 国产精品无码永久免费888| 久久久久亚洲精品天堂久久久久久| 一级一看免费完整版毛片| 国产国拍精品亚洲AV片| 永久免费av无码网站yy| 亚洲一区二区成人| 一区二区无码免费视频网站| 77777午夜亚洲| 四虎国产精品免费视| 一级毛片在播放免费| 亚洲AV无码国产精品色午友在线 | 美女视频黄是免费的网址| 亚洲另类自拍丝袜第五页| 日本无吗免费一二区| 日本中文字幕免费看| 精品国产亚洲一区二区在线观看 | 亚洲色偷偷综合亚洲av78| 日本媚薬痉挛在线观看免费| 春意影院午夜爽爽爽免费| 亚洲VA中文字幕不卡无码| 99热在线免费播放| 亚洲欧美熟妇综合久久久久| 亚洲 国产 图片| 无码午夜成人1000部免费视频| 精品丝袜国产自在线拍亚洲| 亚洲精品国产va在线观看蜜芽| 一区二区三区四区免费视频| 国产亚洲sss在线播放| 国产午夜亚洲不卡| 波多野结衣免费在线|