Spring4笔记----工厂方法配置bean

来源:互联网 发布:nba全明星赛数据 编辑:程序博客网 时间:2024/04/30 07:33

(1)静态工厂方法

调用静态工厂方法创建 Bean是将对象创建的过程封装到静态方法中.当客户端需要对象时,只需要简单地调用静态方法,而不同关心创建对象的细节.

要声明通过静态方法创建的 Bean, 需要在Bean class 属性里指定拥有该工厂的方法的类,同时在 factory-method属性里指定工厂方法的名称.最后, 使用 <constrctor-arg>元素为该方法传递方法参数


import java.util.HashMap;import java.util.Map;//静态工厂方法,直接调用某一个类的静态方法就可以返回Bean的实例public class StaticCarFactory{  private static Map<String,Car> cars = new HashMap<String,Car>();  static  {  cars.put("audi",new Car("audi",300000.0));  cars.put("ford",new Car("ford",300000.0));  }  //静态工厂方法  public static Car getCar(String name)  {  return cars.get(name);  }}

(2)实例工厂方法

实例工厂方法: 将对象的创建过程封装到另外一个对象实例的方法里. 当客户端需要请求对象时, 只需要简单的调用该实例方法而不需要关心对象的创建细节.
要声明通过实例工厂方法创建的 Bean
在 bean 的 factory-bean 属性里指定拥有该工厂方法的 Bean
在 factory-method 属性里指定该工厂方法的名称
使用 construtor-arg 元素为工厂方法传递方法参数

import java.util.HashMap;import java.util.Map;public class InsTanceCarFactory{private  Map<String,Car> cars = null;public InsTanceCarFactory(){cars = new HashMap<String,Car>();cars.put("audi",new Car("audi",300000.0));cars.put("ford",new Car("ford",300000.0));} public Car getCar(String name)  {  return cars.get(name);  }}
配置文件

<!-- 通过静态工厂方法来配置bean,不是配置静态工厂方法实例,而是配置bean实例 --><!-- factory-method指向静态工厂的方法名 --><!-- constructor-arg:如果工厂方法需要传入参数,则用constructor-arg传入参数 --><bean id="car1" class="com.bean.factory.StaticCarFactory" factory-method="getCar"><constructor-arg value="audi"></constructor-arg></bean>    <!-- 配置工厂的实例 -->  <bean id="carFactory" class="com.bean.factory.InsTanceCarFactory"></bean>  <!-- 通过实例方法来配置bean -->  <!-- factory-method指向实例工厂的方法名 -->  <!-- constructor-arg:如果工厂方法需要传入参数,则用constructor-arg传入参数 -->  <bean id="car2" factory-bean="carFactory" factory-method="getCar">      <constructor-arg value="ford"></constructor-arg>  </bean></beans>
测试

public class Main{public static void main(String[] args){ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("factory.xml");Car car1 = context.getBean("car1",Car.class);System.out.println(car1);Car car2 = context.getBean("car2",Car.class);System.out.println(car2);}}




0 0