1. 程式人生 > >Spring使用工廠模式配置bean的三種方式

Spring使用工廠模式配置bean的三種方式

配置bean的三種方法


1.通過靜態工廠方法
class: 指向靜態工廠類的全類名 
factory-method: 指向靜態工廠中返回bean 例項的方法
constructor-arg: 可以傳入引數選擇返回的bean 例項
<bean id="car" class="package.StaticCarFactory" factory-method="getCar">
	<constructor-arg value="BMW"></constructor-arg>
</bean>




Cars: 一個Map型別的集合,裡面存放了Car
public static Car getCar(String brand) {
	return Cars.get(brand)
}




2.通過例項工廠方法
首先建立例項工廠的bean 例項
<bean id="factory" class="package.InstanceCarFactory"></bean>




通過例項工廠來獲得bean 例項
factory-bean: 指向動態工廠的bean 例項
factory-method: 指向靜態工廠中返回bean 例項的方法
constructor-arg: 可以傳入引數選擇返回的bean 例項
<bean id="car" factory-bean="factory" factory-method="getCar">
	<constructor-arg value="BMW"></constructor-arg>
</bean>




3.通過實現FactoryBean介面
通過factorybean 來配置bean的例項
class: 指向FactoryBean 的全類名
property: 配置FactoryBean 的屬性 但實際返回例項卻是FactoryBean 的getObject() 方法返回的例項
<bean id="car" class="package.CarFactoryBean">
	<property name="brand" value="BMW"></property>
</bean>




// 實現FactoryBean介面
public class CarFactoryBean implements FactoruBean<Car> {


	private String brand;
	
	public void setBrand(String brand) {
		this.brand = brand;
	}
	
	/**
	 *  返回bean 的例項
	 */
	@Override
	public Car getObeject() throws Exception {
		return new Car(brand, 1300000);
	}
	
	/**
	 *  返回bean 例項的型別
	 */
	@Override
	public Class<?> getObjectType() {
		return Car.class;
	}
	
	/**
	 * 是否是單例
	 */
	@Override
	public boolean isSingleton() {
		return true;
	}
}