请分别写出IOC静态工厂方法和实例工厂方法的配置

请说明一下IOC的静态工厂方法和实例工厂方法的区别?  

  1. 静态工厂方法:工厂初始化之前,工厂中的类已经被实例化放在工厂容器中

  2. 实例工厂方法:工厂在构造方法初始化时,会将类进行实例化放在工厂中

创建实例类:

 1 public class Car {
 2     private double price;
 3     private String brand;
 4 
 5     public Car() {
 6         System.out.println("cars...constractor");
 7     }
 8 
 9     public Car(double price, String brand) {
10         super();
11         this.price = price;
12         this.brand = brand;
13     }
14 
15     public double getPrice() {
16         return price;
17     }
18 
19     public void setPrice(double price) {
20         this.price = price;
21     }
22 
23     public String getBrand() {
24         return brand;
25     }
26 
27     public void setBrand(String brand) {
28         this.brand = brand;
29     }
30 
31     @Override
32     public String toString() {
33         return "Car{" +
34                 "price=" + price +
35                 ", brand='" + brand + '\'' +
36                 '}';
37     }
38 }

创建实例工厂方法:即调用工厂本身,再调用工厂的实例方法来返回bean实例

 1 public class InstanceCarFactory {
 2     /**
 3      * 实例工厂方法
 4      */
 5     private Map<String,Car> cars = null;
 6     public InstanceCarFactory(){
 7         cars = new HashMap<String, Car>();
 8         cars.put("audi",new Car(3000,"audi"));
 9         cars.put("dffds" , new Car(3000,"audi"));
10     }
11     public Car getCar(String name){
12         return cars.get(name);
13     }
14 }

创建静态工厂方法:直接调用静态方法可以返回Bean的实例

 1 public class StaticCarFactory {
 2     /**
 3      * 静态工厂方法:直接调用静态方法可以返回bean的实例
 4      */
 5     private static Map<String,Car> cars = new HashMap<String, Car>();
 6     static {
 7         cars.put("audi" , new Car(3000,"aodi"));
 8         cars.put("fodo",new Car(3000,"aodi"));
 9     }
10     //静态工厂方法
11     public static Car getCar(String name){
12         return cars.get(name);
13     }
14 
15 }

配置文件:

<span style="font-size:14px;"><?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns:p="http://www.springframework.org/schema/p"

  xsi:schemaLocation="http://www.springframework.org/schema/beans 
             http://www.springframework.org/schema/beans/spring-beans.xsd">
  <!-- 通过静态方法来配置bean,注意不是配置静态工厂方法实例,而是配置bean实例-->

  <!--class属性:指向静态方法的全类名 factory-method:指向静态方法的名字
    constructor-arg:如果工厂方法需要传入参数,则使用constructor-arg来配置参数-->

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

    <constructor-arg value="audi"></constructor-arg>

  </bean>

  <!-- 配置工厂的实例 -->

  <bean id="carFactory" class="com.zhu.string.factory.InstanceCarFactory">

  </bean>

  <bean id="car2" factory-bean="carFactory" factory-method="getCar">

    <constructor-arg value="audi"></constructor-arg>

  </bean>

</beans>
</span>

猜你喜欢

转载自www.cnblogs.com/wk-missQ1/p/12581511.html