当前位置:   article > 正文

Spring工厂方法

spring工厂方法

Spring工厂方法

IoC通过工厂模式创建bean有两种方式:

1、静态工厂方法

2、实例工厂方法

区别:静态工厂类不需要实例化,实例工厂类需要实例化

静态工厂类加工Car对象是用的类方法static方法,不需要创建工厂对象;实例工厂类加工Car对象使用的是工厂对象的构造方法,需要创建工厂对象


(1)、静态工厂方法

1、创建Car类

在这里插入图片描述

2、创建静态工厂类、静态工厂方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、xml

不能这么写,这样就是普通的车,不是被工厂加工了的车。而且报错,因为有参构造会把无参构造覆盖掉
在这里插入图片描述
在这里插入图片描述
正确方法:
在这里插入图片描述

<?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="car1" class="com.lmh.factory.StaticCarFactory" factory-method="getCar">
        <constructor-arg value="1"></constructor-arg>
    </bean>   
   
    <bean id="car2" class="com.lmh.factory.StaticCarFactory" factory-method="getCar">
        <constructor-arg value="2"></constructor-arg>
    </bean>    
</beans>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

在这里插入图片描述

factory-method 指向静态方法。

constructor-arg 的value属性是调用静态方法传入的参数。

在这里插入图片描述在这里插入图片描述


(2)、实例工厂方法

1、创建实例工厂类、工厂方法

2、Spring.xml

    <!-- 实例工厂-->

    <!-- 实例工厂类的对象-->
    <bean id="instanceCarFactory" class="com.lmh.factory.InstanceCarFactory">
    </bean>

<!--Car对象,通过调用实例工厂 对象(factory-bean) 的getCar方法 获取 -->
    <bean id="car_1" factory-bean="instanceCarFactory" factory-method="getCar">
        <constructor-arg value="1"></constructor-arg>
    </bean>

    <bean id="car_2" factory-bean="instanceCarFactory" factory-method="getCar">
        <constructor-arg value="2"></constructor-arg>
    </bean>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

3、测试一下

      //实例化工厂类
        InstanceCarFactory instanceCarFactory = new InstanceCarFactory();
        Car car = instanceCarFactory.getCar(1);
        System.out.println(car);

        //IoC实例化工厂方法
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring_factory.xml");
        Car car1 = (Car) applicationContext.getBean("car_1");
        Car car2 =  (Car)applicationContext.getBean("car_2");
        System.out.println(car1);
        System.out.println(car2);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在这里插入图片描述

在这里插入图片描述

(3)、区别

区别:静态工厂方法 加工Car对象是用的类方法static方法,不需要创建工厂对象;实例工厂方法 加工Car对象使用的是工厂对象的构造方法,需要创建工厂对象

静态工厂方法在Spring.xml中只需配置一个bean,即最终的结果Car即可。

而实例工厂方法在Spring.xml中需要配置两个bean。 一个是工厂的bean,再根据工厂的bean得到Car的bean(对象)。因为getCar()方法是非static的,需要用对象调用。

spring.xml 中 class + factory-method的形式是直接调用类中的工厂方法。

– 静态工厂

<bean id="car1" class="com.lmh.factory.StaticCarFactory" factory-method="getCar"></bean>
  • 1

spring.xml中factory-bean + factory-method的形式则是调用工厂bean 中的工厂方法,就必须先创建工厂bean,再得到Car的Bean。

– 实例工厂

 <bean id="car_1" factory-bean="instanceCarFactory" factory-method="getCar">
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/279840?site
推荐阅读
相关标签
  

闽ICP备14008679号