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

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

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

    隨筆-42  評(píng)論-349  文章-4  trackbacks-0

        殘夢(mèng)追月原創(chuàng),轉(zhuǎn)載請(qǐng)注明。

    在應(yīng)用中,我們常常使用<ref>標(biāo)簽為JavaBean注入它依賴(lài)的對(duì)象。但是對(duì)于一個(gè)大型的系統(tǒng),這個(gè)操作將會(huì)耗費(fèi)我們大量的資源,我們不得不花費(fèi)大量的時(shí)間和精力用于創(chuàng)建和維護(hù)系統(tǒng)中的<ref>標(biāo)簽。實(shí)際上,這種方式也會(huì)在另一種形式上增加了應(yīng)用程序的復(fù)雜性,那么如何解決這個(gè)問(wèn)題呢?Spring為我們提供了一個(gè)自動(dòng)裝配的機(jī)制,盡管這種機(jī)制不是很完善,但是在應(yīng)用中結(jié)合<ref>標(biāo)簽還是可以大大的減少我們的勞動(dòng)強(qiáng)度。前面提到過(guò),在定義Bean時(shí),<bean>標(biāo)簽有一個(gè)autowire屬性,我們可以通過(guò)指定它來(lái)讓容器為受管JavaBean自動(dòng)注入依賴(lài)對(duì)象。

    <bean>autowire屬性有如下六個(gè)取值,他們的說(shuō)明如下:

    1、 No:即不啟用自動(dòng)裝配。Autowire默認(rèn)的值。

    2、 byName:通過(guò)屬性的名字的方式查找JavaBean依賴(lài)的對(duì)象并為其注入。比如說(shuō)類(lèi)Computer有個(gè)屬性printer,指定其autowire屬性為byName后,Spring IoC容器會(huì)在配置文件中查找id/name屬性為printerbean,然后使用Seter方法為其注入。

    3、 byType:通過(guò)屬性的類(lèi)型查找JavaBean依賴(lài)的對(duì)象并為其注入。比如類(lèi)Computer有個(gè)屬性printer,類(lèi)型為Printer,那么,指定其autowire屬性為byType后,Spring IoC容器會(huì)查找Class屬性為Printerbean,使用Seter方法為其注入。

    4、 constructor:通byType一樣,也是通過(guò)類(lèi)型查找依賴(lài)對(duì)象。與byType的區(qū)別在于它不是使用Seter方法注入,而是使用構(gòu)造子注入。

    5、 autodetect:在byTypeconstructor之間自動(dòng)的選擇注入方式。

    6、 default:由上級(jí)標(biāo)簽<beans>default-autowire屬性確定。

    注意:在配置bean時(shí),<bean>標(biāo)簽中Autowire屬性的優(yōu)先級(jí)比其上級(jí)標(biāo)簽高,即是說(shuō),如果在上級(jí)標(biāo)簽中定義default-autowire屬性為byName,而在<bean>中定義為byType時(shí),Spring IoC容器會(huì)優(yōu)先使用<bean>標(biāo)簽的配置。

    下面通過(guò)一個(gè)例子來(lái)說(shuō)明如何在應(yīng)用中使用自動(dòng)裝配(工程代碼見(jiàn)例程3.2)。新建一個(gè)java工程,為其添加上Spring開(kāi)發(fā)能力后,創(chuàng)建一個(gè)ioc.test包,再分別創(chuàng)建電腦類(lèi)(Computer)、主機(jī)類(lèi)(Host)和顯示器類(lèi)(Dispaly),為電腦類(lèi)添加Host類(lèi)型的屬性hostDisplay類(lèi)型的屬性display,再添加一個(gè)run方法,讓電腦可以“運(yùn)行”一起來(lái)。屬性代碼如下:

    電腦類(lèi):

     1package ioc.test;
     2
     3/**
     4 * @author zhangyong
     5*/

     6public class Computer {
     7    
     8    private Host host;
     9    private Display display;
    10    //電腦運(yùn)行方法
    11    public void run(){
    12        System.out.println("你好,我是電腦,正在運(yùn)行!");
    13        System.out.print("   "+host.run()+",");
    14        System.out.println(display.run());
    15    }

    16//Geter和Seter方法,省略
    17}

    18

     

    再給主機(jī)類(lèi)添加一run方法,讓主機(jī)也可以“運(yùn)行”,代碼如下:


    1package ioc.test;
    2
    3public class Host {
    4    public String run(){
    5        return "我是主機(jī),正在運(yùn)行!";
    6    }

    7}

    8

      同上也給Display類(lèi)添加run方法,如下:
    1package ioc.test;
    2
    3public class Display {
    4    public String run(){
    5        return "我是顯示器,正在運(yùn)行!";
    6    }

    7}

    8

    下面便是修改Spring的配置文件,讓IoC容器為我們的“電腦”自動(dòng)裝配“主機(jī)”和“顯示器了”。分別配置兩個(gè)beanhostdisplay。再配置一個(gè)名computer1beanautowire屬性設(shè)為byName,同理配置computer1computer3autowire屬性分別設(shè)為byTypedefault,最后設(shè)置<beans>標(biāo)簽的default-autowire屬性為autodetect。至此,配置工作已經(jīng)完成,可以看到,我們并沒(méi)有顯式的給computer bean它注入依賴(lài)對(duì)象hostdisplay。配置代碼如下:

     1<?xml version="1.0" encoding="UTF-8"?>
     2<beans    default-autowire="autodetect">
     3    <bean id="computer1" class="ioc.test.Computer" autowire="byName"></bean>
     4    <bean id="computer2" class="ioc.test.Computer" autowire="byType"></bean>
     5    <bean id="computer3" class="ioc.test.Computer" autowire="default"></bean>
     6    
     7    <bean id="host" class="ioc.test.Host"></bean>
     8    <bean id="display" class="ioc.test.Display"></bean>    
     9</beans>
    10

    現(xiàn)在可以建立一個(gè)測(cè)試類(lèi)來(lái)測(cè)試一下Spring時(shí)候真的為我們自動(dòng)裝配好了我們需要的bean。代碼如下:

     1package ioc.test;
     2
     3//import省略
     4public class TestMain {
     5
     6    public static void main(String[] args) {
     7        ApplicationContext ac = new ClassPathXmlApplicationContext(
     8                "applicationContext.xml");
     9        //byName
    10        Computer computer1 = (Computer)ac.getBean("computer1");
    11        System.out.println("autowire=\"byName\":");
    12        computer1.run();
    13        
    14        //byType
    15        Computer computer2 = (Computer)ac.getBean("computer2");
    16        System.out.println("autowire=\"byType\":");
    17        computer2.run();
    18        
    19        //default
    20        Computer computer3 = (Computer)ac.getBean("computer3");        
    21        System.out.println("autowire=\"default\":");
    22        computer3.run();
    23    }

    24}

    25

    運(yùn)行該類(lèi),輸出結(jié)果如下:

     
    從運(yùn)行結(jié)果可以看出,Spring IoC容器已經(jīng)為我們自動(dòng)的裝配好的“電腦”,從而配置文件簡(jiǎn)潔了許多。但是,自動(dòng)裝配并不是十全十美的,我們不論是使用byName還是byType的方法,Spring不一定就能很準(zhǔn)確的為我們找到JavaBean依賴(lài)的對(duì)象。另外,如果使用自動(dòng)裝配,Spring配置文件的可讀性也大大降低,我們不能很容易的看出個(gè)bean之間的依賴(lài)關(guān)系,這也在一定程度上降低了程序可維護(hù)性。因此在使用自動(dòng)裝配時(shí),應(yīng)當(dāng)權(quán)衡利弊,合理的與ref的方法相結(jié)合,盡量在降低工作量的同時(shí),保證應(yīng)用的可維護(hù)度。



    By:殘夢(mèng)追月
    posted on 2008-07-20 15:13 殘夢(mèng)追月 閱讀(24766) 評(píng)論(16)  編輯  收藏 所屬分類(lèi): Spring

    評(píng)論:
    # re: Spring Autowiring自動(dòng)裝配 2008-07-20 15:18 | 殘夢(mèng)追月
    寫(xiě)的不好,達(dá)人拍磚啊!  回復(fù)  更多評(píng)論
      
    # re: Spring Autowire自動(dòng)裝配 2009-02-23 14:47 | 老衲
    老衲很以為然  回復(fù)  更多評(píng)論
      
    # re: Spring Autowire自動(dòng)裝配 2009-02-23 14:48 | 老衲
    老衲很以為然343  回復(fù)  更多評(píng)論
      
    # re: Spring Autowire自動(dòng)裝配 2009-04-01 10:19 | 楊?lèi)?ài)友
    寫(xiě)的這么精彩,不頂一下太對(duì)不起你。  回復(fù)  更多評(píng)論
      
    # re: Spring Autowire自動(dòng)裝配 [未登錄](méi) 2009-05-24 12:03 | super
    不錯(cuò)
    通俗易懂  回復(fù)  更多評(píng)論
      
    # re: Spring Autowire自動(dòng)裝配 2010-01-11 15:28 | chaoskz
    我個(gè)人認(rèn)為自動(dòng)注入比較好,架構(gòu)的依賴(lài)關(guān)系應(yīng)該以看文檔為主!  回復(fù)  更多評(píng)論
      
    # re: Spring Autowire自動(dòng)裝配 2011-04-10 11:33 | Jonn
    寫(xiě)的真的不錯(cuò)啊!呵呵 頂  回復(fù)  更多評(píng)論
      
    # re: Spring Autowire自動(dòng)裝配 [未登錄](méi) 2011-12-29 10:49 | jiang
    通俗易懂,頂一個(gè)。  回復(fù)  更多評(píng)論
      
    # re: Spring Autowire自動(dòng)裝配 2012-02-20 14:22 | 譚杰希
    老納法號(hào)亂來(lái)!  回復(fù)  更多評(píng)論
      
    # re: Spring Autowire自動(dòng)裝配 2012-04-19 12:30 | fashion_ly
    寫(xiě)的不錯(cuò)  回復(fù)  更多評(píng)論
      
    # re: Spring Autowire自動(dòng)裝配 2012-12-16 20:10 | Join
    不錯(cuò),很清晰
      回復(fù)  更多評(píng)論
      
    # re: Spring Autowire自動(dòng)裝配 2013-01-29 11:51 | java程序猿
    寫(xiě)的很好,看懂了,對(duì)我?guī)椭Υ? 謝謝了  回復(fù)  更多評(píng)論
      
    # re: Spring Autowire自動(dòng)裝配 2013-04-11 18:45 | 你兒吃草
    cacacaca  回復(fù)  更多評(píng)論
      
    # re: Spring Autowire自動(dòng)裝配 [未登錄](méi) 2013-04-24 17:11 | 大頭
    學(xué)到了 頂一個(gè) 摸摸頭  回復(fù)  更多評(píng)論
      
    # re: Spring Autowire自動(dòng)裝配 [未登錄](méi) 2013-12-02 09:48 | 許仙兒
    栗子不錯(cuò)  回復(fù)  更多評(píng)論
      
    主站蜘蛛池模板: 婷婷国产偷v国产偷v亚洲| 亚洲乱码中文字幕久久孕妇黑人| 16女性下面扒开无遮挡免费| 在线毛片片免费观看| 青青操在线免费观看| a级成人毛片免费图片| 免费精品99久久国产综合精品| 最近免费中文字幕中文高清 | 亚洲黄色在线观看网站| 7777久久亚洲中文字幕蜜桃| 67pao强力打造67194在线午夜亚洲| 亚洲网站在线观看| 亚洲电影免费观看| 亚洲高清视频在线| jzzijzzij在线观看亚洲熟妇| 美女裸免费观看网站| 一级特黄a大片免费| 99精品全国免费观看视频..| 日本卡1卡2卡三卡免费| 国产大片91精品免费观看不卡| 免费视频专区一国产盗摄| 男女啪啪永久免费观看网站| 亚洲?V无码乱码国产精品 | 国产在线国偷精品产拍免费| 免费看美女被靠到爽| 亚洲成人影院在线观看| 亚洲精品乱码久久久久久蜜桃不卡 | 在线免费视频一区| 亚洲AV无码乱码在线观看牲色| 中文字幕一精品亚洲无线一区| 亚洲嫩模在线观看| 亚洲熟妇自偷自拍另欧美| 高h视频在线免费观看| 久草免费福利视频| 一二三四视频在线观看中文版免费| 免费高清小黄站在线观看| 亚洲中文字幕久久精品无码喷水 | 亚洲高清国产拍精品青青草原 | 免费a级毛片在线观看| 国产亚洲综合色就色| 国产精品亚洲自在线播放页码|