1.静态工厂方法
/**
* 静态工厂方法:直接调用某一个类的静态方法就可以返回bean实例
*
*
*/
1)先建立静态工厂
public class StaticCarFactory {
private static Map<String,Car> cars = new HashMap<String,Car>();
static {
cars.put("audi", new Car("audi",300000));
cars.put("baoma", new Car("baoma",500000));
}
//静态工厂方法
public static Car getCar(String name) {
return cars.get(name);
}
}2)配置文件
<!-- 通过静态工厂方法来配置bean,注意不是配置静态工厂方法实例,而是配置bean实例 -->
<!--
class属性:指向静态工厂方法的全类名
factory-method:指向工厂方法的名字
constructor-arg:如果工厂方法需要传入参数,则使用constructor-arg来配置参数
-->
<bean id="car1" class="com.mww.spring.factory.StaticCarFactory" factory-method="getCar">
<constructor-arg value="audi"></constructor-arg>
</bean>
2.实例工厂方法
1)建立工厂
/**
* 实例工厂方法:实例工厂的方法 ,即现需要创建工厂本身,再调用工厂的实例方法来返回bean的实例
*
*
*/
public class InstanceCarFactory {
private Map<String,Car> cars = null;
public InstanceCarFactory() {
cars = new HashMap<>();
cars.put("audi", new Car("Audi",300000));
cars.put("bama", new Car("Baoma",500000));
}
public Car getCar(String brand) {
return cars.get(brand);
}
}
2)配置文件
<!-- 配置工厂的实例 -->
<bean id="carFactory" class="com.mww.spring.factory.InstanceCarFactory"></bean>
<!-- 通过实例方法来配置bean -->
<!--
factory-bean属性:指向实例工厂方法的bean
factory-method:指向工厂方法的名字
constructor-arg:如果工厂方法需要传入参数,则使用constructor-arg来配置参数
-->
<bean id="car2" factory-bean="carFactory" factory-method="getCar">
<constructor-arg value="bama"></constructor-arg>
</bean>
3.main
public class Main {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-factory.xml");
Car car = (Car) ctx.getBean("car1");
System.out.println(car);
Car car2 = (Car) ctx.getBean("car2");
System.out.println(car2);
}
}
原文地址:https://www.cnblogs.com/mwwex/p/12070721.html