通过工厂方法创建bean实例

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);
}

}

猜你喜欢

转载自www.cnblogs.com/mwwex/p/12070721.html