一、静态工厂方法
package com.hcx.spring.beans.factory;
import java.util.HashMap;
import java.util.Map;
/**
* 静态工厂方法:直接调用某一个类的静态方法就可以返回Bean的实例
* @author hcx
*
*/
public class StaticCarFactory {
private static Map<String,Car> cars= new HashMap<String, Car>();
static {
cars.put("audi", new Car("audi", 300000));
cars.put("ford", new Car("ford", 400000));
}
public static Car getCar(String name) {
return cars.get(name);
}
}
<!-- 通过静态工厂方法来配置Bean,注意不是配置静态工厂方法实例,而是Bean实例
class路径是Factory类的路径
factory-method:指向静态工厂方法的名字
-->
<bean id="car1" class="com.hcx.spring.beans.factory.StaticCarFactory" factory-method="getCar">
<!-- 如果工厂方法需要传入参数,使用constructor-arg来配置 -->
<constructor-arg value="audi"></constructor-arg>
</bean>
二、实例工厂方法
package com.hcx.spring.beans.factory;
import java.util.HashMap;
import java.util.Map;
/**
* 实例工厂方法:需要创建工厂本身,再调用工厂实例方法
* @author hcx
*
*/
public class InstanceCarFactory {
private Map<String, Car> cars =null;
public InstanceCarFactory() {
cars = new HashMap<String, Car>();
cars.put("audi", new Car("audi",300000));
cars.put("ford", new Car("ford",300000));
}
public Car getCar(String name) {
return cars.get(name);
}
}
配置文件:
<!-- 配置工厂的实例 -->
<bean id="carFactory" class="com.hcx.spring.beans.factory.InstanceCarFactory"></bean>
<!-- 通过实例工厂方法来配置bean -->
<bean id="car2" factory-bean="carFactory" factory-method="getCar">
<constructor-arg value="ford"></constructor-arg>
</bean>