九调用工厂方法实现Bean

    xiaoxiao2021-04-12  34

    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); } } 输出结果:

    转载请注明原文地址: https://ju.6miu.com/read-667865.html

    最新回复(0)