(11)Spring學習記錄---Spring_bean(靜態,例項工廠與FactoryBean建立Bean)
阿新 • • 發佈:2018-11-08
通過靜態工廠方法建立bean
1.Car.class
private String band;
private double price;
public Car(String band, double price) {
super();
this.band = band;
this.price = price;
}
@Override
public String toString() {
return "Car [band=" + band + ", price=" + price + "]";
}
2.bean-factory.xml
<!-- 通過靜態工廠方法配置bean 配置bean的例項而不是靜態工廠類的例項 --> <!-- class:指向靜態工廠方法的全類名 factory-method:指向靜態方法的類名 constructor-arg:如果工廠方法需要值,使用constructor-arg配置引數 --> <bean id="car" class="jjh.test.factory.StaticCarFactory" factory-method="getCar"> <!-- 通過構造方法注入值 --> <constructor-arg value="audi"></constructor-arg> </bean>
3.StaticCarFactory.class
/** * 靜態工廠方法:直接呼叫一個類的靜態方法就可以返回bean的例項 * **/ public class StaticCarFactory { private static Map<String, Car> cars=new HashMap<String, Car>(); static { cars.put("audi",new Car("audi", 400000)); cars.put("ford",new Car("ford", 300000)); } public static Car getCar(String name) { return cars.get(name); } }
4.結果
通過使用例項工廠方法建立bean
1.InstanceCarFactory .class
/**
* 例項工廠方法:通過建立例項工廠方法,在呼叫工廠的方法來獲取bean例項
* **/
public class InstanceCarFactory {
private Map<String, Car> cars=null;
public InstanceCarFactory() {
super();
cars=new HashMap<String, Car>();
cars.put("audi",new Car("audi", 400000));
cars.put("ford",new Car("ford", 300000));
}
public Car getCar(String name) {
return cars.get(name);
}
}
2.bean-factory.xml
<!-- 配置工廠例項 -->
<bean id="carFactory" class="jjh.test.factory.InstanceCarFactory"></bean>
<bean id="car2" factory-bean="carFactory" factory-method="getCar">
<!-- 通過構造方法注入值 -->
<constructor-arg value="ford"></constructor-arg>
</bean>
3.結果
通過FactoryBean返回例項
1.CarFactoryBean.class
//自定義FactoryBean方法
public class CarFactoryBean implements FactoryBean<Car>{
private String band;
public void setBand(String band) {
this.band = band;
}
@Override
public Car getObject() throws Exception {
return new Car(band, 400000);
}
@Override
public Class<?> getObjectType() {
// TODO Auto-generated method stub
return null;
}
// 是否單例模式
@Override
public boolean isSingleton() {
// TODO Auto-generated method stub
return true;
}
}
2.factory-bean.xml
<!--
通過factoryBean 來配置bean
class:指向factoryBean的全類名
property:配置屬性
通過 factoryBean 的getObject方法返回bean的例項
-->
<bean id="car3" class="jjh.test.factory.CarFactoryBean">
<property name="band" value="audi"></property>
</bean>
3.結果