九调用工厂方法实现Bean

来源:互联网 发布:淘宝优惠券 微信公众号 编辑:程序博客网 时间:2024/06/07 06:04

1.静态工厂方法:

调用静态工厂方法创建 Bean是将对象创建的过程封装到静态方法中.

当客户端需要对象时, 只需要简单地调用静态方法, 而不同关心创建对象的细节.要声明通过静态方法创建的 Bean,

需要在 Bean 的 class 属性里指定拥有该工厂的方法的类, 同时在 factory-method 属性里指定工厂方法的名称.

最后, 使用 <constrctor-arg> 元素为该方法传递方法参数.
ex:

首先创建一个静态工厂类:

public class StaticCarFactory {    private static Map<String,Car> cars=new HashMap<>();    static {        cars.put("audi",new Car("audi",30000));        cars.put("ford",new Car("ford",40000));    }    public static Car getCar(String name){        return cars.get(name);    }}

同样的需要配置bean:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">    <bean id="cars" class="beansfactory.StaticCarFactory"          factory-method="getCar">        <constructor-arg value="audi"></constructor-arg>    </bean></beans>

在主程序中进行输出:

public class Main {    public static void main(String[] args){        ApplicationContext ctx=new ClassPathXmlApplicationContext("beans-factory.xml");        Car test= (Car) ctx.getBean("cars");        System.out.println(test);    }}

2.调用实例工厂方法实现Bean:

首先创建一个实例工厂类:

public class InstanceCarFactory {    private Map<String,Car> cars=null;    public InstanceCarFactory(){        cars=new HashMap<String,Car>();        cars.put("audi",new Car("audi",30000));        cars.put("ford",new Car("ford",40000));    }    public Car getCar(String brand){        return cars.get(brand);    }}

同样的创建配置文件:

 <!--配置工厂实例-->    <!--step1-->    <bean id="carFactory" class="beansfactory.InstanceCarFactory"></bean>    <!--step2-->    <bean id="car2" factory-bean="carFactory" factory-method="getCar">        <constructor-arg value="ford"></constructor-arg>    </bean>

在主程序中进行调用:

public class Main {    public static void main(String[] args){        ApplicationContext ctx=new ClassPathXmlApplicationContext("beans-factory.xml");        Car test= (Car) ctx.getBean("car2");        System.out.println(test);    }}

输出结果:



0 0
原创粉丝点击