(11)Spring学习记录---Spring_bean(静态,实例工厂与FactoryBean创建Bean)

通过静态工厂方法创建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.结果

猜你喜欢

转载自blog.csdn.net/ck784101777/article/details/83069756