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

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

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

    華山論劍

    一心一意做技術(shù)!

    BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
      31 Posts :: 0 Stories :: 447 Comments :: 0 Trackbacks
      Spring的功能是很強(qiáng)大的,在其“絕不發(fā)明自己認(rèn)為好的輪子,而只發(fā)明自己認(rèn)為不好的輪子”的指導(dǎo)思想下,通過(guò)充分實(shí)踐了“一切實(shí)事求是、‘循證架構(gòu)’的工作方式”的理論,基本上把輕量級(jí)的J2EE應(yīng)用框架(如ORM、MVC等)進(jìn)行了整合,并構(gòu)架了一些常用的功能(如DAO),形成了一個(gè)功能強(qiáng)大的J2EE輕量級(jí)企業(yè)應(yīng)用框架。
      然而,或許是大家對(duì)Spring掌握得還不透徹的緣故吧,看到很多軟件企業(yè)中用到的Spring功能,基本上大多數(shù)都只是用其IOC功能,有時(shí)候附帶用了其中的AOP事務(wù)管理功能。
      IOC及AOP雖然不是Spring首創(chuàng),然而其在這兩塊都是做得很不錯(cuò)的,應(yīng)該說(shuō)整個(gè)Spring框架就是圍繞著其IOC實(shí)現(xiàn)及AOP實(shí)現(xiàn)架設(shè)起來(lái)的。我想,深入挖掘IOC、AOP以及Spring中的實(shí)現(xiàn),使用等,對(duì)于初學(xué)者幫助會(huì)非常大,因此,從本期開(kāi)始,大峽的《玩玩Spring系列》將伴隨大家一起走進(jìn)IOC及AOP的世界。
      由于本人水平有限,文中難免有很多不足甚至錯(cuò)誤之處,還請(qǐng)各位朋友不吝批評(píng)指教。
    ?
    一、IOC簡(jiǎn)介
      IOC-全稱Inversion of Control,中文解釋?zhuān)嚎刂品崔D(zhuǎn)。另外,IOC又稱DI(全稱)Dependency Injection,中文解釋?zhuān)阂蕾囎⑷搿?br />  呵呵,這些名詞搞得有點(diǎn)像學(xué)古文的味道哈。很多大師還都說(shuō)IOC中有一個(gè)著名的好萊塢理論:你呆著別動(dòng),到時(shí)我會(huì)找你。由于本人未到過(guò)好萊塢參加過(guò)社會(huì)實(shí)踐,因此,這句話理解有點(diǎn)困難。
      IOC是一種新的設(shè)計(jì)模式,即IOC模式,系統(tǒng)中通過(guò)引入實(shí)現(xiàn)了IOC模式的IOC容器,即可由IOC容器來(lái)管理對(duì)象的生命周期、依賴關(guān)系等,從而使得應(yīng)用程序的配置和依賴性規(guī)范與實(shí)際的應(yīng)用程序代碼分開(kāi)。其中一個(gè)特點(diǎn)就是通過(guò)文本的配件文件進(jìn)行應(yīng)用程序組件間相互關(guān)系的配置,而不用重新修改并編譯具體的Java代碼。
      當(dāng)前比較知名的IOC容器有:Pico Container、Avalon 、Spring、JBoss、HiveMind、EJB等,國(guó)內(nèi)由板橋里人負(fù)責(zé)的國(guó)產(chǎn)開(kāi)源項(xiàng)目Jdon框架,也是具有IOC容器功能(由于沒(méi)來(lái)得及認(rèn)真研讀其源碼,似乎jdon中IOC部份是調(diào)用Pico的IOC容器功能來(lái)實(shí)現(xiàn)的)。
      在上面的幾個(gè)IOC容器中,輕量級(jí)的有Pico Container、Avalon、Spring、HiveMind等,超重量級(jí)的有EJB,而半輕半重的有容器有JBoss,Jdon等
      
      IOC究竟是什么?IOC是如何產(chǎn)生的?用在什么場(chǎng)合?為什么我們以前不用IOC,而現(xiàn)在要用IOC?“物有本末,事有終始”,為了更加透徹的理解這一問(wèn)題,大峽打算從自己所理解的面向?qū)ο?OO)設(shè)計(jì)及編程發(fā)展歷程來(lái)進(jìn)行分析,也許這樣能讓IOC的初學(xué)者更加了解IOC的發(fā)展的前因后果,爭(zhēng)取做到“知其然,知其所以然,使其然!”。
      若大家等不急了,就直接百度一下有關(guān)IOC的其它文章,這方面國(guó)內(nèi)很多先驅(qū)們已經(jīng)作了很多介紹。如冰云的《IOC詳解》、板橋里人的設(shè)計(jì)模式及IOC理論等。
    ?
    二、?最老的OO編程
      記得曾經(jīng)看《Think in Java》最早版本的時(shí)候,里面有這么一句讓人振奮話:一切都是對(duì)象。這時(shí)我們OO編程的核心是圍繞著面向?qū)ο缶幊痰娜齻€(gè)特性即“繼承”、“封裝”、“多態(tài)”來(lái)展開(kāi)的。
    2.1 封裝
      那時(shí)我們學(xué)會(huì)了對(duì)現(xiàn)實(shí)就的事物及軟件模型進(jìn)行了抽象。比如要描述一只貓,那么這支貓應(yīng)該有“顏色”、“重量”、“公母”、“脾氣”、“出生日期”等屬性,另外還有“跑”、“吃”、“叫”、“貓捉老鼠”等方法。如Java代碼來(lái)表示,大致就是如下:
    public Class Cat
    {
    private String color;//顏色
    private String weight;//重量
    private String sex;//公母
    private String temper;//脾氣
    private String birthday;//出生日期
    private void run ();//跑
    private void eat (Food food); //吃(食物)
    private void shout(int type);//叫(類(lèi)別)
    private boolean chase(Mice mice);//貓捉老鼠
    }
    ?
    2.2 繼承
      最早的OO編程時(shí)期,我們還會(huì)引入繼承,還經(jīng)常鼓勵(lì)大家多用繼續(xù),認(rèn)為繼承就是OO編程思想的核心。繼承的核心就是圍繞著如何把類(lèi)與類(lèi)之間具有共同特性的部份抽象到基類(lèi)中。認(rèn)為這樣不但能使用了OO的特性,還減少了很多子類(lèi)的代碼。
      我們通過(guò)日常生活的常識(shí)知道,貓是一種動(dòng)物,因此動(dòng)物有的特性他基本上都有。于是,如果我們的系統(tǒng)中不但有貓,還會(huì)有很多其它的動(dòng)物出現(xiàn)。我們就會(huì)設(shè)計(jì)一個(gè)動(dòng)物類(lèi),把所有動(dòng)物的共性抽象到一個(gè)基類(lèi)中。這里,貓及動(dòng)物基類(lèi)的代碼大致如下:
    public abstract Class Animal{
    private String color;//顏色
    private String weight;//重量
    private String sex;//公母
    private String temper;//脾氣
    private String birthday;//出生日期
    private void run ();//跑
    private void eat (Food food); //吃(食物)
    private void shout(int type);//叫(類(lèi)別)
    }
    public Class Cat extends Animal
    ?private int power;//能力
    ?private int agility;//敏捷度
    ?? //? 貓捉老鼠是特有的方法
    ?private boolean chase(Mice mice) {
    ??return true;
    ?};
    }
    ?
    ?
    2.3 多態(tài)
      這時(shí)我們還會(huì)不時(shí)使用到OO的另外一個(gè)特性多態(tài)。多態(tài)是很重要的一門(mén)技術(shù),然而很多時(shí)候卻沒(méi)有很好的理解并使用,回頭看以前的代碼,我們看到有很多地方屬于故弄玄虛的嫌疑。
      接上面的例子,假如我們要寫(xiě)一個(gè)喂養(yǎng)寵物(有貓、狗、豬、豹、老鼠等)的程序。利用Java的多態(tài)特性,我們的大致代碼如下:
    public class PetManage {
    ?//喂食我的寵物
    ?public void feeding(Animal a)
    ?{??
    ?}?
    ?/**
    ? * @param args
    ? */
    ?public static void main(String[] args) {?
    ??Animal myPet=new Cat();
    ??PetManage pm=new PetManage();????
    ??pm.feeding(myPet);
    ?}
    }
      通過(guò)使用多態(tài)特性,哪一天若我們的不喜歡貓,而是喜歡養(yǎng)豬的時(shí)候,只要把new Cat()變成new Pig(),即可。
    2.4 對(duì)象生命周期
      這一階段的OO程序中,我們知道要用一個(gè)對(duì)象的時(shí)候,就要使用Java中的關(guān)鍵字new來(lái)生成一個(gè)來(lái)用即可。OO對(duì)于我們來(lái)說(shuō),一切都是那么簡(jiǎn)單,很多時(shí)候甚至感覺(jué)OO跟OP的編程方法也沒(méi)太大區(qū)別。代碼如下:
    Cat myCat=new Cat();//創(chuàng)建一支具體的貓
    myCat.shout();//叫一聲
      此時(shí),我們對(duì)Java虛擬是非常信任的,我們的思想也很單純,我們知道Java對(duì)象的生命開(kāi)始于new關(guān)鍵詞。我們不太關(guān)心對(duì)象生命的結(jié)束,我們知道Java有一個(gè)比C語(yǔ)言歷害、智能化的垃圾收集器,他會(huì)幫我們自己的清理內(nèi)存中不用的對(duì)象。
      當(dāng)然,也有的人由于對(duì)垃圾收集器忠誠(chéng)度的懷疑,不放心垃圾收集器的能力,于是在程序中經(jīng)常要加一句類(lèi)似“myPet=null”的代碼來(lái)結(jié)束對(duì)象的生命。
      當(dāng)然,我們也知道有一些外部資源如數(shù)據(jù)庫(kù)連接等,需要手動(dòng)熟悉資源。于是知道在使用類(lèi)似資源的時(shí)候必須都加上一句:conn.close(),有時(shí)候還要在close()后面再加一句:conn=null。呵呵,非常有意思。
    ?
    2.5小結(jié)
      現(xiàn)在看來(lái),其實(shí)那時(shí)確實(shí)犯了很多幼稚的錯(cuò)誤,也走了不少的彎路,做了很多畫(huà)蛇添足的工作,寫(xiě)了很多難與維護(hù)的代碼。
      對(duì)比今天的IOC模式,若要從早的OO方法中硬要找一個(gè)類(lèi)似Spring的容器的話,那就是:“程序員+JVM本身”。是程序員以及JVM一起我們管理對(duì)象的生命周期、對(duì)象之間的關(guān)系等。那時(shí)候若有任何變動(dòng)都需要改代碼,(雖然好的設(shè)計(jì)代碼修改會(huì)非常少,但也得改!),然后編譯,然后拿到測(cè)試環(huán)境及用戶環(huán)境中執(zhí)行。如此反復(fù),年日復(fù)一日、年復(fù)一年。
      那時(shí)我們的代碼復(fù)用用得最多的就是OO的繼承功能,另外還有很多OP方法中帶過(guò)來(lái)的函數(shù)。
    ?
      本文中涉及到的幾個(gè)簡(jiǎn)單源碼,請(qǐng)到EasyJF開(kāi)源團(tuán)隊(duì)官網(wǎng)下載,地址:
      http://www.easyjf.com/html/bbs/20060602/12718636-1843943.htm?ejid=1287314863003738
    ?
     下期預(yù)告:OO編程的第二階段,設(shè)計(jì)模式的廣泛應(yīng)用。
     (備注:由于筆者不想拐彎抹角浪費(fèi)大家玩的時(shí)間,有些“表白”難免過(guò)于直接,還請(qǐng)不喜歡Spring或者過(guò)分喜歡Spring的同行多多見(jiàn)諒! 本文中的“我們”,僅指與筆者有著同樣成長(zhǎng)經(jīng)歷的80后人,對(duì)于文章提到的觀點(diǎn),多數(shù)皆屬于筆者個(gè)人觀點(diǎn),不代表任何人。
      本文作者:EasyJF開(kāi)源團(tuán)隊(duì)大峽 版權(quán)歸EasyJF開(kāi)源團(tuán)隊(duì)所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)保留作者版權(quán)聲明,謝謝!)
    ?
    關(guān)于玩玩Spring系列,玩的過(guò)程及結(jié)果將會(huì)不定期在以下三個(gè)網(wǎng)站全球同步公布:
    1.EasyJF開(kāi)源團(tuán)隊(duì)官方網(wǎng)站,網(wǎng)址:http://www.easyjf.com
    2.筆者的Blog,網(wǎng)址:http://m.tkk7.com/daxia/
    3.Java研究組織(JR) ,網(wǎng)址:http://www.javaresearch.org
    歡迎更多跟我一樣愛(ài)玩的哥哥姐姐弟弟妹妹一起來(lái)玩。
    posted on 2006-06-02 08:45 大峽 閱讀(3322) 評(píng)論(9)  編輯  收藏

    Feedback

    # re: 玩玩Spring之IOC(一) 2006-06-03 13:57 BEZY
    希望以后能夠屏蔽一切有關(guān) EasyJF 的團(tuán)隊(duì)文章。。。我不反對(duì)你們從事開(kāi)源事業(yè),而且很支持。。。但是希望能夠少見(jiàn)倒你們團(tuán)隊(duì)發(fā)的文章。。。。。。不要強(qiáng)加思想于人。。。。。  回復(fù)  更多評(píng)論
      

    # re: 玩玩Spring之IOC(一) 2006-06-03 15:04 netvista
    “IOC-全稱Inversion of Control,中文解釋?zhuān)嚎刂品崔D(zhuǎn)。另外,IOC又稱DI(全稱)Dependency Injection,中文解釋?zhuān)阂蕾囎⑷搿!?

    IOC and DI are not exactly the same thing.
    BTW. IMHO. Your so-called easyjf framework are so aweful and filled with code smell.  回復(fù)  更多評(píng)論
      

    # re: 玩玩Spring之IOC(一) 2006-06-03 16:40 無(wú)極中人
    @BEZY
    嚴(yán)重BS說(shuō)這話的人,有你這么支持的嗎?我怎么都沒(méi)看出這篇文章有強(qiáng)加思想于人的意思啊,中國(guó)在政治上的言論被禁止這個(gè)到是聽(tīng)說(shuō),還沒(méi)聽(tīng)說(shuō)過(guò)有要禁止技術(shù)上的交流。  回復(fù)  更多評(píng)論
      

    # re: 玩玩Spring之IOC(一) 2006-06-05 13:17 roygbip
    希望能看到更深入一些的文章!  回復(fù)  更多評(píng)論
      

    # re: 玩玩Spring之IOC(一) 2006-06-09 18:01 我一直在努力!
    講了跟沒(méi)講一樣的,這篇文章里的句子我在其他地方都看過(guò)n遍了
    最好介紹一下spring的架構(gòu),解構(gòu)一下spring的代碼  回復(fù)  更多評(píng)論
      

    # re: 玩玩Spring之IOC(一) 2006-08-25 10:25 cawhong
    寫(xiě)得非常好,初學(xué)者的好文章  回復(fù)  更多評(píng)論
      

    # re: 玩玩Spring之IOC(一) 2007-08-27 17:11 lynn
    沒(méi)下文了??

    “下期預(yù)告:OO編程的第二階段,設(shè)計(jì)模式的廣泛應(yīng)用。”
    這個(gè)什么時(shí)候?qū)懀浚?


    寫(xiě)好麻煩通知我哈..ningliaoyuan@s_o_h_u.com
    避免被抓郵件地址,加了點(diǎn)下滑線..  回復(fù)  更多評(píng)論
      

    # re: 玩玩Spring之IOC(一) 2011-08-22 17:50 wildtiger
    還沒(méi)說(shuō)完阿  回復(fù)  更多評(píng)論
      

    # re: 玩玩Spring之IOC(一) 2011-12-19 20:48 xinyonda
    MARK  回復(fù)  更多評(píng)論
      


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产亚洲精品影视在线产品| 日韩人妻一区二区三区免费| 德国女人一级毛片免费| 亚洲一区二区三区在线| 国产免费看JIZZ视频| 亚洲人成小说网站色| 在线观看av永久免费| 亚洲日产乱码一二三区别 | 亚洲乱理伦片在线观看中字| 国产福利在线免费| 亚洲高清乱码午夜电影网| 在线jyzzjyzz免费视频| 精品女同一区二区三区免费播放| 亚洲AV无码一区二区三区国产| 无码的免费不卡毛片视频| 国产亚洲一区二区手机在线观看| 在线看片免费人成视频播 | 亚洲一级毛片免费在线观看| 噼里啪啦免费观看高清动漫4| 亚洲色偷偷综合亚洲AV伊人蜜桃 | 免费无码又爽又刺激聊天APP| 亚洲伊人久久大香线蕉AV| 国产女高清在线看免费观看| 两个人日本免费完整版在线观看1| 亚洲国产精品自在线一区二区| 亚洲人成在线免费观看| 亚洲av无码成人精品国产| 亚洲国产成人乱码精品女人久久久不卡 | 久久亚洲美女精品国产精品 | 亚洲区小说区图片区QVOD| aaa毛片免费观看| 久久久久无码精品亚洲日韩| 可以免费看黄视频的网站| 免费一区二区无码视频在线播放| 亚洲日韩精品一区二区三区无码| 亚洲一级毛片免费在线观看| 特级毛片全部免费播放| 久久精品国产亚洲av麻豆| 午夜一级免费视频| 国产免费一区二区视频| 欧洲 亚洲 国产图片综合|