『Spring学习进程11』通过工厂方法配置Bean

通过调用静态工厂方法创建Bean

  • 调用静态工厂方法创建Bean时将对象创建的过程封装到静态方法中。当客户端需要对象时,只需要简单的调用静态方法,而不需关心创建对象的细节
  • 要声明通过静态方法创建的Bean,需要在Bean的class属性里指定拥有该工厂的方法类,同时在factory-method属性里指定工厂方法的名称。最后使用<constrctor-arg>元素为该方法传递方法参数。

 

工厂类

public class StaticCarFactory {
	
	private static Map<String,Car> cars = new HashMap<String,Car>();
	
	static {
		cars.put("audi", new Car("audi",200000));
		cars.put("ford", new Car("ford",300000));
	}
	//静态工厂方法
	public static Car getCar(String name) {
		return cars.get(name);
	}

}

配置文件

<!-- 通过静态工厂方法来批准配置bean,注意不是配置静态工厂方法实例,而是配置bean实例 -->
    <!-- 
         class属性:指向静态工厂方法的全类名
         factory-method:指向静态工厂方法的名字
         constructor-arg:指向工厂方法需要输入参数,则使用constructor-arg 来配置参数
     -->
    <bean id="car1"
          class="com.wq.spring.beans.factory.StaticCarFactory"
          factory-method="getCar">
        <constructor-arg value="audi"></constructor-arg>  
    </bean>

通过调用实例工厂方法创建Bean

  • 实例工厂方法:将对象的创建过程封装到另外一个对象实例的方法中。当客户端需要请求对象时,只需要简单的调用该实例方法而不需要关心对象的创建细节。
  • 要声明通过实例工厂方法创建的Bean
  1.  class属性:指向静态工厂方法的全类名
  2.          factory-method:指向静态工厂方法的名字
  3.          constructor-arg:指向工厂方法需要输入参数,则使用constructor-arg 来配置参数

实例工厂方法类

/*
 * 实例工厂方法:实例工厂的方法。即需要创建工厂本身,再调用工厂的实例方法来实现bean
 */
public class InstanceCarFactory {
	private Map<String,Car> cars =null;
	public InstanceCarFactory() {
		cars = new HashMap<String,Car>();
		cars.put("audi2", new Car("audi2",300000));
		cars.put("ford2", new Car("ford2",220000));	
	}
	
	public Car getCar(String brand) {
		return cars.get(brand);
	}
}

配置文件

<!-- 通过实例工厂方法来配置bean -->
    <bean id="carFactory"
          class="com.wq.spring.beans.factory.InstanceCarFactory"></bean>
    <bean id="car2" factory-bean="carFactory" factory-method="getCar">
        <constructor-arg  value="ford2"></constructor-arg>
    </bean>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值