Spring中Bean的配置方式之通过工厂方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring中Bean的配置方式之通过工厂方法相关的知识,希望对你有一定的参考价值。
通过调用静态工厂方法创建Bean
调用静态工厂方法创建 Bean是将对象创建的过程封装到静态方法中. 当客户端需要对象时, 只需要简单地调用静态方法, 而不同关心创建对象的细节.
要声明通过静态方法创建的 Bean, 需要在 Bean 的 class 属性里指定拥有该工厂的方法的类, 同时在 factory-method 属性里指定工厂方法的名称. 最后, 使用 <constrctor-arg> 元素为该方法传递方法参数.
相关代码:
Car.java
private String brand; private double price;
StaticCarFactory.java
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-factory.xml
<!-- 通过静态工厂方法来配置bean,注意不是配置静态工厂方法实例,而是配置bean实例 --> <!-- Class属性:指向静态工厂方法的全类名 factory-method:指向静态工厂方法的名字 constructor-arg:如果工厂方法需要传入参数,则使用constructor-arg来配置参数 --> <bean id="car1" class="com.yslf.factory.StaticCarFactory" factory-method="getCar"> <constructor-arg value="ford"></constructor-arg> </bean>
通过调用实例工厂方法创建Bean
实例工厂方法: 将对象的创建过程封装到另外一个对象实例的方法里. 当客户端需要请求对象时, 只需要简单的调用该实例方法而不需要关心对象的创建细节.
要声明通过实例工厂方法创建的 Bean
在 bean 的 factory-bean 属性里指定拥有该工厂方法的 Bean
在 factory-method 属性里指定该工厂方法的名称
使用 construtor-arg 元素为工厂方法传递方法参数
相关代码:
InstaceCarFactory.java
public class InstaceCarFactory { private static Map<String, Car> cars=null; public InstaceCarFactory() { cars=new HashMap<String,Car>(); cars.put("audi", new Car("audi",300000)); cars.put("ford", new Car("ford",400000)); } public Car getCar(String brand){ return cars.get(brand); } }
bean-factory.xml
<!-- 配置实例工厂方法来配置bean --> <!-- factory-bean属性:指向静态工厂方法的bean factory-method:指向静态工厂方法的名字 constructor-arg:如果工厂方法需要传入参数,则使用constructor-arg来配置参数 --> <bean id="car2" factory-bean="carFactory" factory-method="getCar"> <constructor-arg value="audi"></constructor-arg> </bean>
Main.java
public class Main { public static void main(String[] args) { ApplicationContext context=new ClassPathXmlApplicationContext("bean-factory.xml"); Car car1=(Car) context.getBean("car1"); System.out.println(car1); Car car2=(Car) context.getBean("car2"); System.out.println(car2); } }
以上是关于Spring中Bean的配置方式之通过工厂方法的主要内容,如果未能解决你的问题,请参考以下文章