ゞ沉默是金ゞ

          魚離不開水,但是沒有說不離開哪滴水.
          posts - 98,comments - 104,trackbacks - 0
          在xml配置文件中,autowire有6種類型,可以在<bean/>元素中使用autowire屬性指定:
          模式                        說明   
           no                       不使用自動(dòng)裝配,必須通過ref元素指定依賴,默認(rèn)設(shè)置。   
          byName                    根據(jù)屬性名自動(dòng)裝配。此選項(xiàng)將檢查容器并根據(jù)名字查找與                   
                                    屬性完全一致的bean,并將其與屬性自動(dòng)裝配。   
          byType                    如果容器中存在一個(gè)與指定屬性類型相同的bean,那么將與   
                                    該屬性自動(dòng)裝配;如果存在多個(gè)該類型bean,那么拋出異   
                                    常,并指出不能使用byType方式進(jìn)行自動(dòng)裝配;如果沒有找   
                                    到相匹配的bean,則什么事都不發(fā)生,也可以通過設(shè)置   
                                    dependency
          -check="objects"讓Spring拋出異常。   
          constructor               與byType方式類似,不同之處在于它應(yīng)用于構(gòu)造器參數(shù)。如   
                                    果容器中沒有找到與構(gòu)造器參數(shù)類型一致的bean,那么拋出   
                                    異常。   
          autodetect                通過bean類的自省機(jī)制(introspection)來決定是使用   
                                    constructor還是byType方式進(jìn)行自動(dòng)裝配。如果發(fā)現(xiàn)默認(rèn)的   
                                    構(gòu)造器,那么將使用byType方式。  
          default
          看代碼:
          Computer.java
          package com.redoffice;

          public class Computer {
              
              
          private Host host;
              
          private Display display;
              
              
          public Computer(){
                  
              }

              
              
          public Computer(Host host, Display display) {
                  
          super();
                  
          this.host = host;
                  
          this.display = display;
              }


              
          public void run(){
                  System.out.println();
                  System.out.print(
          "   "+host.run()+",");
                  System.out.println(display.run());
              }


              
          public Host getHost() {
                  
          return host;
              }


              
          public void setHost(Host host) {
                  
          this.host = host;
              }


              
          public Display getDisplay() {
                  
          return display;
              }


              
          public void setDisplay(Display display) {
                  
          this.display = display;
              }

          }


          Host.java
          package com.redoffice;

          public class Host {
              
          public String run() {
                  
          return "我是主機(jī),正在運(yùn)行!";
              }

          }

          Display.java
          package com.redoffice;

          public class Display {
              
          public String run() {
                  
          return "我是顯示器,正在運(yùn)行!";
              }

          }

          TestMain.java
          package com.redoffice;

          import org.apache.commons.logging.Log;
          import org.apache.commons.logging.LogFactory;
          import org.apache.log4j.PropertyConfigurator;
          import org.springframework.context.ApplicationContext;
          import org.springframework.context.support.ClassPathXmlApplicationContext;

          public class TestMain {
              
          private static Log log = LogFactory.getLog(TestMain.class);
              
              
          public static void main(String[] args) {
                  PropertyConfigurator.configure(
          "bin/log4j.properties");
                  log.debug(
          "entering main method");
                  ApplicationContext ac 
          = new ClassPathXmlApplicationContext(
                          
          "applicationContext.xml");
                  
          //byName
                  Computer computer1 = (Computer)ac.getBean("computer1");
                  System.out.println(
          "autowire=\"byName\":");
                  computer1.run();
                  
                  
          //byType
                  Computer computer2 = (Computer)ac.getBean("computer2");
                  System.out.println(
          "autowire=\"byType\":");
                  computer2.run();
                  
                  
          //default
                  Computer computer3 = (Computer)ac.getBean("computer3");        
                  System.out.println(
          "autowire=\"default\":");
                  computer3.run();
                  
                  
          //autodetect
                  Computer computer4 = (Computer)ac.getBean("computer4");        
                  System.out.println(
          "autowire=\"autodetect\":");
                  computer4.run();
                  
                  
          //constructor
                  Computer computer5 = (Computer)ac.getBean("computer5");        
                  System.out.println(
          "autowire=\"constructor\":");
                  computer5.run();
                  
                  
          //no
                  Computer computer6 = (Computer)ac.getBean("computer6");        
                  System.out.println(
          "autowire=\"no\":");
                  computer6.run();
                  log.debug(
          "leaving main method");
              }

          }


          applicationContext.xml
          <?xml version="1.0" encoding="UTF-8"?>
          <beans xmlns="http://www.springframework.org/schema/beans"
              xmlns:xsi
          ="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation
          ="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"
              
          default-autowire="autodetect">
              
          <bean id="host" name="host" class="com.redoffice.Host"></bean>
              
          <bean id="display" name="display" class="com.redoffice.Display"></bean>
              
              
          <!-- autowire有no,constructor,byName,byType,default,autodetect幾種狀況 -->
              
          <bean id="computer1" class="com.redoffice.Computer" autowire="byName"></bean>
              
          <bean id="computer2" class="com.redoffice.Computer" autowire="byType"></bean>
              
          <bean id="computer3" class="com.redoffice.Computer" autowire="default"></bean>
              
          <bean id="computer4" class="com.redoffice.Computer" autowire="autodetect"></bean>
              
          <!-- 在Computer類中必須有一個(gè)無參和有參的構(gòu)造函數(shù),否則報(bào)錯(cuò) -->
              
          <bean id="computer5" class="com.redoffice.Computer" autowire="constructor">
                  
          <constructor-arg index="0">
                      
          <ref bean="host"/>
                  
          </constructor-arg>
                  
          <constructor-arg index="1">
                      
          <ref bean="display"/>
                  
          </constructor-arg>
              
          </bean>
              
          <bean id="computer6" class="com.redoffice.Computer" autowire="no">
                  
          <constructor-arg index="0">
                      
          <ref bean="host"/>
                  
          </constructor-arg>
                  
          <constructor-arg index="1">
                      
          <ref bean="display"/>
                  
          </constructor-arg>
              
          </bean>
              
          </beans>

          希望有什么不對(duì)的地方多多指教。
          posted on 2009-04-03 10:28 ゞ沉默是金ゞ 閱讀(1712) 評(píng)論(4)  編輯  收藏 所屬分類: Spring基礎(chǔ)

          FeedBack:
          # re: Spring自動(dòng)裝配的學(xué)習(xí)
          2009-04-03 10:35 | asiawang
          自動(dòng)裝配 還是不用為好,會(huì)產(chǎn)生不可預(yù)知的錯(cuò)誤!  回復(fù)  更多評(píng)論
            
          # re: Spring自動(dòng)裝配的學(xué)習(xí)
          2009-04-03 11:41 | .........
          # re: Spring自動(dòng)裝配的學(xué)習(xí)
          2009-04-04 18:03 | Robin's Java World
          @asiawang
          我們在項(xiàng)目里用得蠻好的呀,不過最好只用byName方式。  回復(fù)  更多評(píng)論
            
          # re: Spring自動(dòng)裝配的學(xué)習(xí)[未登錄]
          2010-08-22 13:10 | Sam
          寫的簡潔易懂。
          其實(shí)第五點(diǎn),類沒有顯式寫出構(gòu)造函數(shù)的話,java不會(huì)再創(chuàng)造默認(rèn)構(gòu)造函數(shù)。所以你必須寫明無參構(gòu)造函數(shù)。

          很有用處  回復(fù)  更多評(píng)論
            

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 页游| 文安县| 九寨沟县| 潜山县| 奉节县| 高陵县| 海丰县| 金坛市| 枝江市| 五常市| 定远县| 西安市| 邹平县| 油尖旺区| 布拖县| 外汇| 新田县| 冀州市| 磴口县| 长岛县| 芦山县| 海原县| 清河县| 桦川县| 台州市| 秭归县| 墨脱县| 安国市| 绥中县| 和顺县| 凉山| 调兵山市| 昔阳县| 临城县| 开江县| 陆良县| 苏州市| 平山县| 苍梧县| 如皋市| 金川县|