未知數據

          簡,是一種境界.

          首頁 新隨筆 聯系 聚合 管理
            8 Posts :: 0 Stories :: 2 Comments :: 0 Trackbacks

          spring2.0之自動裝配

          Bar.java

          public class Bar {

          }

          Foo.java

          public class Foo {

          }

          SimpleTest.java
          public class SimpleTest {
          private Foo foo;
          private Foo foo2;
          private Bar bar;
          public SimpleTest(){

          }
          public SimpleTest(Foo foo, Bar bar) {
          System.out.println("constructor bar,foo call");
          this.foo = foo;
          this.bar = bar;
          }
          public SimpleTest(Foo foo) {
          System.out.println("constructor foo call");
          this.foo = foo;
          }
          public Bar getBar() {
          return bar;
          }
          public void setBar(Bar bar) {
          System.out.println("property bar set");
          this.bar = bar;
          }
          public Foo getFoo() {
          return foo;
          }
          public void setFoo(Foo foo) {
          System.out.println("property foo set");
          this.foo = foo;
          }
          public Foo getFoo2() {
          return foo2;
          }
          public void setFoo2(Foo foo2) {
          System.out.println("property foo2 set");
          this.foo2 = foo2;
          }

          }

          xml配置文件:
          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
          "
          <beans>
          <!-- 定義foo和bar -->
          <bean id="foo" class="Foo"/>
          <bean id="bar" class="Bar"/>

          <!-- 使用ByName方式裝配,這種方式的原理是如果目標bean有一個名為foo的屬性而bean工廠有一個同名的bean,則把這個bean裝配給目標bean的屬性 Spring容器查找與SimpleTest屬性名稱(即foo和bar)相同的Bean,然后自動注入到該屬性中,否則不會注入 -->
          <bean id="simpleTest1" class="SimpleTest" autowire="byName"/>

          <!-- 使用ByType方式裝配,這種方式的原理是如果目標bean的屬性類型和bean工廠中的一個bean的類型相府,則把這個bean裝配給目標bean,如果對于一個相符,則出現異常 Spring容器查找與SimpleTest屬性的設值方法參數類型(即Foo和Bar)兼容的Bean -->
          <bean id="simpleTest2" class="SimpleTest" autowire="byType"/>

          <!-- 使用constructor方式,這種方式的原理是最大數量的匹配目標bean的構造方法,如果目標bean有一個String的構造方法,一個String和int的構造方法 bean工廠中也有string和int兩個bean,則spring會裝配String和int的構造方法
          Spring容器將試圖找出所有與構造方法的參數類型兼容的Bean
          -->
          <bean id="simpleTest3" class="SimpleTest" autowire="constructor"/>

          <!-- 自動裝配方式,這種方式會自動在byType和Constructor中自動匹配,當目標bean有一個無參(本例)構造方法是,spring會選擇使用byType方式 -->
          <bean id="simpleTest4" class="SimpleTest" autowire="autodetect"/>
          </beans>
          測試:

          import java.io.File;
          import java.util.Iterator;
          import java.util.List;
          import java.util.Map;
          import java.util.Properties;
          import java.util.Set;
          import org.springframework.beans.factory.BeanFactory;
          import org.springframework.beans.factory.support.BeanDefinitionRegistry;
          import org.springframework.beans.factory.xml.XmlBeanFactory;
          import org.springframework.core.io.FileSystemResource;
          public class TestSpring {
          public static void main(String args[]) throws Exception{
          //獲取bean factory
          BeanFactory factory=(BeanFactory)getBeanFactory();
          SimpleTest simpleTest=null;
          System.out.println("use byName:");
          simpleTest=(SimpleTest)factory.getBean("simpleTest1");
          System.out.println("use byType:");
          simpleTest=(SimpleTest)factory.getBean("simpleTest2");
          System.out.println("use byContructor:");
          simpleTest=(SimpleTest)factory.getBean("simpleTest3");
          System.out.println("use byAuto:");
          simpleTest=(SimpleTest)factory.getBean("simpleTest4");
          }
          public static BeanDefinitionRegistry getBeanFactory() {
          //獲取bean factory
          String realpath="";
          //加載配置項
          realpath=System.getProperty("user.dir")+File.separator+"src"+File.separator+File.separator+"beans.xml";
          XmlBeanFactory factory=new XmlBeanFactory(new FileSystemResource(realpath));

          return factory;
          }
          }

          結果:

          2008-2-29 10:26:04 org.springframework.core.CollectionFactory <clinit>
          信息: JDK 1.4+ collections available
          2008-2-29 10:26:04 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
          信息: Loading XML bean definitions from file [D:\MyWork\AutoWire\src\beans.xml]
          use byName:
          property bar set
          property foo set
          property foo2 set
          use byType:
          property bar set
          property foo set
          property foo2 set
          use byContructor:
          constructor bar,foo call
          use byAuto:
          property bar set
          property foo set
          property foo2 set

          Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1675871


          posted on 2008-02-29 11:54 未知數據 閱讀(1219) 評論(0)  編輯  收藏 所屬分類: Spring
          主站蜘蛛池模板: 丽水市| 蓬安县| 阜平县| 介休市| 瑞昌市| 咸阳市| 满洲里市| 大同县| 平江县| 伊川县| 密云县| 舞阳县| 平乐县| 兴义市| 鄯善县| 岳阳县| 德昌县| 温泉县| 宝兴县| 宁陵县| 义乌市| 瓦房店市| 女性| 洱源县| 大余县| 深水埗区| 仁布县| 靖安县| 延庆县| 宾阳县| 盘山县| 会东县| 沭阳县| 米易县| 巴林右旗| 潜江市| 琼海市| 洛川县| 突泉县| 启东市| 乐陵市|