国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Spring配置bean的方法(工廠方法和Factorybean)

2019-11-14 21:50:58
字體:
供稿:網(wǎng)友
SPRing配置bean的方法(工廠方法和Factorybean)

通過工廠方法配置bean

  

  通過調(diào)用靜態(tài)工廠方法創(chuàng)建bean    通過靜態(tài)工廠方法創(chuàng)建bean是將對象創(chuàng)建的過程封裝到靜態(tài)方法中。當(dāng)客戶端需要對象時,只需要簡單地調(diào)用靜態(tài)方法,而不關(guān)心創(chuàng)建對象的細(xì)節(jié)。    要聲明通過靜態(tài)方法創(chuàng)建的bean,需要在bean的class屬性里指定擁有該工廠的方法的類,通知在factory-method屬性里指定工廠方法的名稱,

    最后,使用<constructor-arg>元素為該方法傳遞方法參數(shù)  通過調(diào)用實(shí)例工廠方法創(chuàng)建bean    實(shí)例工廠方法:將對象的創(chuàng)建過程封裝到另外一個對象實(shí)例的方法里。當(dāng)客戶端需要請求對象時,只需要簡單的調(diào)用該實(shí)例方法而不需關(guān)心對象的創(chuàng)建細(xì)節(jié)。    要聲明通過實(shí)例工廠方法創(chuàng)建的bean:      -在bean的factory-bean屬性里指定擁有該工廠方法的bean      -在factory-method屬性里指定該工廠方法的名稱      -使用constructor-arg元素為工廠方法傳遞方法參數(shù)

靜態(tài)工廠類:

 

 1 package com.yl.factory; 2  3 import java.util.HashMap; 4 import java.util.Map; 5  6 /** 7  * 靜態(tài)工廠方法:直接調(diào)用某一個類的靜態(tài)方法就可與返回bean的實(shí)例 8  * @author yul 9  *10  */11 public class StaticCarFactory {12     13     private static Map<String, Car> cars = new HashMap<String, Car>();14     15     static {16         cars.put("audi", new Car("audi", 300000));17         cars.put("ford", new Car("ford", 300000));18     }19     /**20      * 靜態(tài)工廠方法21      * @param name22      * @return23      */24     public static Car getCar(String name) {25         26         return cars.get(name);27     }28 }

實(shí)例工廠類:

 1 package com.yl.factory; 2  3 import java.util.HashMap; 4 import java.util.Map; 5 /*** 6  * 實(shí)例工廠方法:實(shí)例工廠的方法,即現(xiàn)需要創(chuàng)建工廠本身,在調(diào)用工廠的實(shí)例方法來返回bean的實(shí)例 7  * @author yul 8  * 9  */10 public class InstanceCarFactory {11     12     private Map<String, Car> cars = new HashMap<String, Car>();13     14     public InstanceCarFactory() {15         cars = new HashMap<String, Car>();16         cars.put("audi", new Car("audi", 300000));17         cars.put("ford", new Car("ford", 400000));18     }19     20     public Car getCar(String brand) {21         return cars.get(brand);22     }23 }

工廠方法的配置文件:

 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 5  6     <!-- 通過靜態(tài)工廠方法來配置bean,注意不是配置靜態(tài)工廠方法實(shí)例,而是配置bean實(shí)例 --> 7     <!--  8         class屬性:指向靜態(tài)工廠方法的全類名 9         factory-method:指向靜態(tài)工廠方法的名字10         constructor-arg:如果靜態(tài)工廠方法需要傳入?yún)?shù),則使用constructor-arg來配置參數(shù)11      -->12     <bean id="car1" 13         class="com.yl.factory.StaticCarFactory"14         factory-method="getCar">15         <constructor-arg value="audi"></constructor-arg>16     </bean>17     18     <!-- 配置工廠的實(shí)例 -->19     <bean id="carFactory" class="com.yl.factory.InstanceCarFactory"></bean>20     21     <!-- 22         factory-bean:指向?qū)嵗S方法的bean23         factory-method:指向?qū)嵗S方法的名字24         constructor-arg:如果實(shí)例工廠方法需要傳入?yún)?shù),則使用constructor-arg來配置參數(shù)25      -->26     <!-- 通過實(shí)例工廠方法來配置bean -->27     <bean id="car2" factory-bean="carFactory" factory-method="getCar">28         <constructor-arg value="ford"></constructor-arg>29     </bean>30 </beans>

通過Factorybean配置bean

繼承Factorybean的實(shí)現(xiàn)類:

 1 package com.yl.factorybean; 2  3 import org.springframework.beans.factory.FactoryBean; 4 //自定義的Factorybean需要實(shí)現(xiàn)FactoryBean接口 5 public class CarFactoryBean implements FactoryBean<Car> { 6      7     private String brand; 8      9     public void setBrand(String brand) {10         this.brand = brand;11     }12     13     /**14      * 返回bean的對象15      */16     @Override17     public Car getObject() throws Exception {18         // TODO Auto-generated method stub19         return new Car("BMW", 600000);20     }21     /**22      * 返回bean的類型23      */24     @Override25     public Class<?> getObjectType() {26         // TODO Auto-generated method stub27         return Car.class;28     }29     30     @Override31     public boolean isSingleton() {32         // TODO Auto-generated method stub33         return true;34     }35     36 }

配置文件:

 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 5     <!--  6         通過Factorybean來配置bean的實(shí)例 7         class:指向Factorybean的全類名 8         property:配置Factorybean的屬性 9         10         但實(shí)際返回的實(shí)例卻是Factorybean的getObject()方法返回的實(shí)例11      -->12     <bean id="car" class="com.yl.factorybean.CarFactoryBean">13         <property name="brand" value="BMW"></property>14     </bean>15 </beans>


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 陆川县| 白水县| 建阳市| 阿克陶县| 贞丰县| 进贤县| 浦江县| 福鼎市| 屯昌县| 丰原市| 夹江县| 紫阳县| 洮南市| 喀喇沁旗| 大悟县| 鹿邑县| 靖远县| 墨玉县| 卢氏县| 敖汉旗| 平乐县| 凭祥市| 延吉市| 永福县| 河东区| 余江县| 密云县| 靖安县| 鹤峰县| 许昌市| 时尚| 麻阳| 定日县| 龙陵县| 襄樊市| 正镶白旗| 永善县| 惠水县| 芦溪县| 榆社县| 正宁县|