zoukankan      html  css  js  c++  java
  • 通过工厂方法配置Bean

        前面几节,我们配过了好多Bean,通过反射机制,在class属性里填写全类名,现在我们来讲讲其他方式,通过工厂方法,还有通过FactoryBean,这个在我们整合第三方框架时会用到。

        工厂方法可以分为静态工厂方法和实例工厂方法。

    静态工厂方法

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

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

        做一下准备工作,创建Car.java为了方便,我们需要额外给它加一个含参的构造方法:

        创建StaticCarFactory.java,所谓静态工厂方法就是直接调用某个类的静态方法就可以返回Bean实例。

    1. package com.figsprite.bean.factory;  
    2.     
    3. import java.util.HashMap;  
    4. import java.util.Map;  
    5.     
    6. public class StaticCarFactory {  
    7.     
    8.     
    9.     private static Map<String,Car> cars = new HashMap<>();  
    10.     
    11.     
    12.     static {  
    13.         cars.put("奥迪",new Car("奥迪",233));  
    14.         cars.put("宝马",new Car("宝马",666));  
    15.     }  
    16.     
    17.     //静态工厂方法  
    18.     public static Car getCar(String name){  
    19.         return cars.get(name);  
    20.     }  
    21. }  

      创建新的配置文件,此时,class属性只想静态工厂方法的全类名,factory-method指向静态工厂方法名,最后,如果工厂方法需要参数,通过<constructror-arg>配置参数

    <bean id="car1" class="com.figsprite.bean.factory.StaticCarFactory"
    factory-method="getCar"
    >

    <constructor-arg value="
    奥迪"/>
    </bean>

    接下来写一个测试方法

                   

    实例工厂方法

        实例工厂指的是创建Bean之前还要实例化工厂。在调用工厂的实例方法返回bean的实例

    创建一个实例工厂类:InstanceCarFactory.java

    1. package com.figsprite.bean.factory;  
    2.     
    3. import java.util.HashMap;  
    4. import java.util.Map;  
    5.     
    6. public class InstanceCarFactory {  
    7.     private Map<String,Car> cars = null;  
    8.     
    9.     public InstanceCarFactory(){  
    10.         cars = new HashMap<>();  
    11.         cars.put("奥迪",new Car("奥迪",233));  
    12.         cars.put("宝马",new Car("宝马",666));  
    13.     }  
    14.     
    15.     
    16.     public Car getCar(String brand){  
    17.         return cars.get(brand);  
    18.     }  
    19. }  

    来到配置文件,我们需要先造一个工厂bean,再通过这个bean创建car的bean

    1. <bean id="carFactory" class="com.figsprite.bean.factory.InstanceCarFactory"/>  
    2.     
    3. <bean id="car2" factory-bean="carFactory" factory-method="getCar">  
    4.     <constructor-arg value="宝马"></constructor-arg>  
    5. </bean>  

  • 相关阅读:
    JS 和 CSS 的位置对其他资源加载顺序的影响
    How browsers workBehind the scenes of modern web browsers
    Gruntjs入门 (2)
    Superhero.js – 构建大型 JavaScript 应用程序的最佳资源
    利用位反操作来简化 indexOf 判断
    Gruntjs入门 (1)
    js和css的顺序关系
    (翻译)理解JavaScript函数调用和"this"(by Yehuda Katz)
    秒,微秒,毫秒
    您试图从目录中执行 CGI、ISAPI 或其他可执行程序,但该目录不允许执行程序
  • 原文地址:https://www.cnblogs.com/figsprite/p/10776190.html
Copyright © 2011-2022 走看看