posts - 120,  comments - 19,  trackbacks - 0
          Spring使用BeanFactory模式來管理Bean,但Spring中提到的Bean不是標準的意義上的JavaBean(僅包含一個默認的構造函數,在屬性后面定義相對應的setter和getter方法),而是任何你想讓它管理的類,比如連接池、甚至BeanFactory本身。

          一)Bean的設計常用下面幾種模式

          1、標準Bean:

          使用默認的構造函數和基于setter、getter方法的依賴注射

          Bean類代碼:

          java代碼:?

          public class ExampleBean {
          ? ? private BeanOne beanOne;
          ? ? private BeanTwo beanTwo;
          ? ? privateint count;
          ? ?
          ? ? publicvoid setBeanOne(BeanOne beanOne){
          ? ? ? ? this.beanOne = beanOne;
          ? ? }
          ? ?
          ? ? publicvoid setBeanTwo(BeanTwo beanTwo){
          ? ? ? ? this.beanTwo = beanTwo;
          ? ? }
          ? ?
          ? ? publicvoid setCount(int count){
          ? ? ? ? this.count = count;
          ? ? }? ?
          }


          在配置文件中定義:

          java代碼:?

          <bean id="exampleBean" class="examples.ExampleBean">
          ? ? <property name="beanOne"><ref bean="bean1"/></property>
          ? ? <property name="beanTwo"><ref bean="bean2"/></property>
          ? ? <property name="count"><value>1</value></property>
          </bean>

          <bean id="bean1" class="examples.BeanOne"/>
          <bean id="bean2" class="examples.BeanTwo"/>


          2、構造函數模式

          自定義的構造函數,基于構造函數參數的依賴注射

          Bean類代碼:

          java代碼:?

          public class ExampleBean {
          ? ? private BeanOne beanOne;
          ? ? private BeanTwo beanTwo;
          ? ? privateint count;
          ? ?
          ? ? public ExampleBean(BeanOne beanOne, BeanTwo beanTwo, int count){
          ? ? ? ? this.beanOne = beanOne;
          ? ? ? ? this.beanTwo = beanTwo;
          ? ? ? ? this.count = count;
          ? ? }
          }


          在配置文件中定義:
          java代碼:?


          <bean id="exampleBean" class="examples.ExampleBean">
          ? ? <constructor-arg><ref bean="bean1"/></constructor-arg>
          ? ? <constructor-arg><ref bean="bean2"/></constructor-arg>
          ? ? <constructor-arg><value>1</value></constructor-arg>
          </bean>

          <bean id="bean1" class="examples.BeanOne"/>
          <bean id="bean2" class="examples.BeanTwo"/>


          3、靜態工廠方法模式

          靜態工廠方法必須是static的,基于方法參數的依賴注射。

          Bean類代碼:

          java代碼:?

          public class ExampleBean {
          ? ? private BeanOne beanOne;
          ? ? private BeanTwo beanTwo;
          ? ? privateint count;
          ? ? //構造函數私有
          ? ? private ExampleBean(BeanOne beanOne, BeanTwo beanTwo, int count){
          ? ? ? ? this.beanOne = beanOne;
          ? ? ? ? this.beanTwo = beanTwo;
          ? ? ? ? this.count = count;
          ? ? }
          ? ? //對外提供靜態的方法
          ? ? publicstatic ExampleBean createInstance(BeanOne beanOne, BeanTwo beanTwo, int count){
          ? ? ? ? ExampleBean eb = new ExampleBean(beanOne,beanTwo,count);
          ? ? ? ? return eb;
          ? ? }
          }


          在配置文件中定義:

          java代碼:?

          <bean id="exampleBean" class="examples.ExampleBean" factory-method="createInstance">
          ? ? <constructor-arg><ref bean="bean1"/></constructor-arg>
          ? ? <constructor-arg><ref bean="bean2"/></constructor-arg>
          ? ? <constructor-arg><value>1</value></constructor-arg>
          </bean>

          <bean id="bean1" class="examples.BeanOne"/>
          <bean id="bean2" class="examples.BeanTwo"/>



          3、實例工廠方法模式

          調用一個已存在的bean(這個bean應該是工廠類型)的工廠方法來創建新的bean,基于方法參數的依賴注射

          該模式沒有Bean類;

          在配置文件中定義:

          java代碼:?

          <bean id="exampleBean"
          ? ? ? factory-bean="myFactoryBean"
          ? ? ? factory-method="createInstance"/>

          <bean id="myFactoryBean" class="examples.ExampleBean" factory-method="createInstance">
          ? ? <constructor-arg><ref bean="bean1"/></constructor-arg>
          ? ? <constructor-arg><ref bean="bean2"/></constructor-arg>
          ? ? <constructor-arg><value>1</value></constructor-arg>
          </bean>

          <bean id="bean1" class="examples.BeanOne"/>
          <bean id="bean2" class="examples.BeanTwo"/>


          二)Bean其它參數的配置

          一個常用Bean的配置參數和解釋

          <bean id="" ——標志符,用它引用唯一的Bean
          class="" ——該Bean對應的類,前面說到實例工廠方法模式創建的Bean沒有類
          singleton="" ——值為true或false,標識該Bean是否為單實例模式?如果為false則對這個bean
          的每次請求都會創建一個新的bean實例
          init-method="" ——向應用層返回引用前執行的初始化方法
          destroy-method="" ——該Bean的銷毀方法
          depends-on=""> ——在Bean加載前,首先加載的指定資源
          ....
          </bean>

          三)property(或constructor-arg元素)的配置

          1、用字符串形式指定常見類型的屬性或參數的value值,JavaBean的PropertyEditor負責類型轉化如:

          java代碼:?

          <property name="driverClassName">
          ? ? <value>com.mysql.jdbc.Driver</value>
          </property>
          <property name="url">
          ? ? <value>jdbc:mysql://localhost:3306/mydb</value>
          </property>


          2、注意null和""(空串)的區別,如:
          java代碼:?


          <property name="email"><value></value></property>
          <property name="email"><null/></property>



          3、list、set、map、以及 props 元素用來定義和設置Java對應類型List、Set、Map、和 Properties ,如:

          java代碼:?


          <property name="school">
          ? ?<props>
          ? ? ? <prop key="school01">The xi'an technology university</prop>
          ? ? ? <prop key="school02">The BeiJing university</prop>
          ? ?</props>
          </property>

          <property name="someList">
          ? ?<list>
          ? ? ? <value>a list element followed by a reference</value>
          ? ? ? <ref bean="myDataSource"/>
          ? ?</list>
          </property>

          <property name="someMap">
          ? ?<map>
          ? ? ? <entry key="001">
          ? ? ? ? ?<value>just some string</value>
          ? ? ? </entry>
          ? ? ? <entry key="yup a ref">
          ? ? ? ? ?<ref bean="myDataSource"/>
          ? ? ? </entry>
          ? ?</map>
          </property>
          ? ? ? ?
          <property name="someSet">
          ? ? ? <set>
          ? ? ? ? ?<value>just some string</value>
          ? ? ? ? ?<ref bean="myDataSource"/>
          ? ? ? </set>
          </property>


          4、內部Bean和ref元素引用容器管理的其他bean

          一個內部Bean的例子:
          java代碼:?


          <bean id="dep" class="com.bean.Conpany">
          ? ? <property name="manager">
          ? ? ? ? <bean class="com.bean.Person">
          ? ? ? ? ? ? <property name="name"><value>Tony</value></property>
          ? ? ? ? ? ? <property name="age"><value>51</value></property>
          ? ? ? ? </bean>
          ? ? </property>
          </bean>


          ref元素引用的例子:
          java代碼:?


          <bean id="person_manger" class="com.bean.Person">
          ? ? <property name="name"><value>Tony</value></property>
          ? ? <property name="age"><value>51</value></property>
          </bean>

          <bean id="dep" class="com.bean.Conpany">
          ? ? <property name="manager">
          ? ? ? ? <idref bean="person_manager"/>
          ? ? </property>
          </bean>



          注:元素引用可以是下面三種權限:
          1)<idref bean="person_manager"/>
          引用的Bean可以在同一個BeanFactory/ApplicationContext(無論是否在同一個XML文件中)中,也可以在父BeanFactory/ApplicationContext中
          2)<idref local="person_manager"/>
          引用的bean在同一個XML文件中
          3)<idref parent="person_manager"/>
          引用的bean必須在當前BeanFactory(ApplicationContext)的父BeanFactory(ApplicationContext)中.
          有新文章時間: 2006-3-23 12:58:26?? ?標題: Spring學習筆記(二)Bean引用回復將這個帖子加入我的Blog

          Spring使用BeanFactory模式來管理Bean,但Spring中提到的Bean不是標準的意義上的JavaBean(僅包含一個默認的構造函數,在屬性后面定義相對應的setter和getter方法),而是任何你想讓它管理的類,比如連接池、甚至BeanFactory本身。

          一)Bean的設計常用下面幾種模式

          1、標準Bean:

          使用默認的構造函數和基于setter、getter方法的依賴注射

          Bean類代碼:

          java代碼:?

          publicclass ExampleBean {
          ? ? private BeanOne beanOne;
          ? ? private BeanTwo beanTwo;
          ? ? privateint count;
          ? ?
          ? ? publicvoid setBeanOne(BeanOne beanOne){
          ? ? ? ? this.beanOne = beanOne;
          ? ? }
          ? ?
          ? ? publicvoid setBeanTwo(BeanTwo beanTwo){
          ? ? ? ? this.beanTwo = beanTwo;
          ? ? }
          ? ?
          ? ? publicvoid setCount(int count){
          ? ? ? ? this.count = count;
          ? ? }? ?
          }


          在配置文件中定義:

          java代碼:?

          <bean id="exampleBean" class="examples.ExampleBean">
          ? ? <property name="beanOne"><ref bean="bean1"/></property>
          ? ? <property name="beanTwo"><ref bean="bean2"/></property>
          ? ? <property name="count"><value>1</value></property>
          </bean>

          <bean id="bean1" class="examples.BeanOne"/>
          <bean id="bean2" class="examples.BeanTwo"/>


          2、構造函數模式

          自定義的構造函數,基于構造函數參數的依賴注射

          Bean類代碼:

          java代碼:?

          publicclass ExampleBean {
          ? ? private BeanOne beanOne;
          ? ? private BeanTwo beanTwo;
          ? ? privateint count;
          ? ?
          ? ? public ExampleBean(BeanOne beanOne, BeanTwo beanTwo, int count){
          ? ? ? ? this.beanOne = beanOne;
          ? ? ? ? this.beanTwo = beanTwo;
          ? ? ? ? this.count = count;
          ? ? }
          }


          在配置文件中定義:
          java代碼:?


          <bean id="exampleBean" class="examples.ExampleBean">
          ? ? <constructor-arg><ref bean="bean1"/></constructor-arg>
          ? ? <constructor-arg><ref bean="bean2"/></constructor-arg>
          ? ? <constructor-arg><value>1</value></constructor-arg>
          </bean>

          <bean id="bean1" class="examples.BeanOne"/>
          <bean id="bean2" class="examples.BeanTwo"/>


          3、靜態工廠方法模式

          靜態工廠方法必須是static的,基于方法參數的依賴注射。

          Bean類代碼:

          java代碼:?

          publicclass ExampleBean {
          ? ? private BeanOne beanOne;
          ? ? private BeanTwo beanTwo;
          ? ? privateint count;
          ? ? //構造函數私有
          ? ? private ExampleBean(BeanOne beanOne, BeanTwo beanTwo, int count){
          ? ? ? ? this.beanOne = beanOne;
          ? ? ? ? this.beanTwo = beanTwo;
          ? ? ? ? this.count = count;
          ? ? }
          ? ? //對外提供靜態的方法
          ? ? publicstatic ExampleBean createInstance(BeanOne beanOne, BeanTwo beanTwo, int count){
          ? ? ? ? ExampleBean eb = new ExampleBean(beanOne,beanTwo,count);
          ? ? ? ? return eb;
          ? ? }
          }


          在配置文件中定義:

          java代碼:?

          <bean id="exampleBean" class="examples.ExampleBean" factory-method="createInstance">
          ? ? <constructor-arg><ref bean="bean1"/></constructor-arg>
          ? ? <constructor-arg><ref bean="bean2"/></constructor-arg>
          ? ? <constructor-arg><value>1</value></constructor-arg>
          </bean>

          <bean id="bean1" class="examples.BeanOne"/>
          <bean id="bean2" class="examples.BeanTwo"/>



          3、實例工廠方法模式

          調用一個已存在的bean(這個bean應該是工廠類型)的工廠方法來創建新的bean,基于方法參數的依賴注射

          該模式沒有Bean類;

          在配置文件中定義:

          java代碼:?

          <bean id="exampleBean"
          ? ? ? factory-bean="myFactoryBean"
          ? ? ? factory-method="createInstance"/>

          <bean id="myFactoryBean" class="examples.ExampleBean" factory-method="createInstance">
          ? ? <constructor-arg><ref bean="bean1"/></constructor-arg>
          ? ? <constructor-arg><ref bean="bean2"/></constructor-arg>
          ? ? <constructor-arg><value>1</value></constructor-arg>
          </bean>

          <bean id="bean1" class="examples.BeanOne"/>
          <bean id="bean2" class="examples.BeanTwo"/>


          二)Bean其它參數的配置

          一個常用Bean的配置參數和解釋

          <bean id="" ——標志符,用它引用唯一的Bean
          class="" ——該Bean對應的類,前面說到實例工廠方法模式創建的Bean沒有類
          singleton="" ——值為true或false,標識該Bean是否為單實例模式?如果為false則對這個bean
          的每次請求都會創建一個新的bean實例
          init-method="" ——向應用層返回引用前執行的初始化方法
          destroy-method="" ——該Bean的銷毀方法
          depends-on=""> ——在Bean加載前,首先加載的指定資源
          ....
          </bean>

          三)property(或constructor-arg元素)的配置

          1、用字符串形式指定常見類型的屬性或參數的value值,JavaBean的PropertyEditor負責類型轉化如:

          java代碼:?

          <property name="driverClassName">
          ? ? <value>com.mysql.jdbc.Driver</value>
          </property>
          <property name="url">
          ? ? <value>jdbc:mysql://localhost:3306/mydb</value>
          </property>


          2、注意null和""(空串)的區別,如:
          java代碼:?


          <property name="email"><value></value></property>
          <property name="email"><null/></property>



          3、list、set、map、以及 props 元素用來定義和設置Java對應類型List、Set、Map、和 Properties ,如:

          java代碼:?


          <property name="school">
          ? ?<props>
          ? ? ? <prop key="school01">The xi'an technology university</prop>
          ? ? ? <prop key="school02">The BeiJing university</prop>
          ? ?</props>
          </property>

          <property name="someList">
          ? ?<list>
          ? ? ? <value>a list element followed by a reference</value>
          ? ? ? <ref bean="myDataSource"/>
          ? ?</list>
          </property>

          <property name="someMap">
          ? ?<map>
          ? ? ? <entry key="001">
          ? ? ? ? ?<value>just some string</value>
          ? ? ? </entry>
          ? ? ? <entry key="yup a ref">
          ? ? ? ? ?<ref bean="myDataSource"/>
          ? ? ? </entry>
          ? ?</map>
          </property>
          ? ? ? ?
          <property name="someSet">
          ? ? ? <set>
          ? ? ? ? ?<value>just some string</value>
          ? ? ? ? ?<ref bean="myDataSource"/>
          ? ? ? </set>
          </property>


          4、內部Bean和ref元素引用容器管理的其他bean

          一個內部Bean的例子:
          java代碼:?


          <bean id="dep" class="com.bean.Conpany">
          ? ? <property name="manager">
          ? ? ? ? <bean class="com.bean.Person">
          ? ? ? ? ? ? <property name="name"><value>Tony</value></property>
          ? ? ? ? ? ? <property name="age"><value>51</value></property>
          ? ? ? ? </bean>
          ? ? </property>
          </bean>


          ref元素引用的例子:
          java代碼:?


          <bean id="person_manger" class="com.bean.Person">
          ? ? <property name="name"><value>Tony</value></property>
          ? ? <property name="age"><value>51</value></property>
          </bean>

          <bean id="dep" class="com.bean.Conpany">
          ? ? <property name="manager">
          ? ? ? ? <idref bean="person_manager"/>
          ? ? </property>
          </bean>



          注:元素引用可以是下面三種權限:
          1)<idref bean="person_manager"/>
          引用的Bean可以在同一個BeanFactory/ApplicationContext(無論是否在同一個XML文件中)中,也可以在父BeanFactory/ApplicationContext中
          2)<idref local="person_manager"/>
          引用的bean在同一個XML文件中
          3)<idref parent="person_manager"/>
          引用的bean必須在當前BeanFactory(ApplicationContext)的父BeanFactory(ApplicationContext)中

          引用注明出處:http://spaces.msn.com/pococoon/blog/cns!D25B6032F7AD1992!193.entry




          posted on 2006-03-23 13:42 阿成 閱讀(301) 評論(0)  編輯  收藏 所屬分類: Spring
          主站蜘蛛池模板: 教育| 大同市| 余庆县| 敦化市| 监利县| 全南县| 北碚区| 土默特右旗| 石嘴山市| 阿拉善左旗| 莒南县| 虞城县| 白朗县| 米易县| 许昌市| 淮南市| 凌海市| 柞水县| 桐柏县| 青田县| 拉萨市| 三门县| 日土县| 临海市| 当雄县| 朝阳市| 黄冈市| 香格里拉县| 江西省| 贺州市| 高清| 正镶白旗| 商河县| 嘉禾县| 金阳县| 石阡县| 临澧县| 成武县| 长兴县| 南昌县| 化德县|