学科分类
目录
SSM框架

实例工厂方式实例化

还有一种实例化Bean的方式就是采用实例工厂。此种方式的工厂类中,不再使用静态方法创建Bean实例,而是采用直接创建Bean实例的方式。同时,在配置文件中,需要实例化的Bean也不是通过class属性直接指向的实例化类,而是通过factory-bean属性指向配置的实例工厂,然后使用factory-method属性确定使用工厂中的哪个方法。下面通过一个案例来演示实例工厂方式的使用。

(1)在chapter02项目的src目录下,创建一个com.itheima.instance.factory包,在该包中创建Bean3类,该类与Bean1一样,不需添加任何方法。

(2)在com.itheima.instance.factory包中,创建工厂类MyBean3Factory,在类中使用默认无参构造方法输出“bean3工厂实例化中”语句,并使用createBean()方法来创建Bean3对象,如文件1所示。

文件1 MyBean3Factory.java

 1    package com.itheima.instance.factory;
 2    public class MyBean3Factory {
 3        public MyBean3Factory() {
 4            System.out.println("bean3工厂实例化中");
 5        }
 6        //创建Bean3实例的方法
 7        public Bean3 createBean(){
 8            return new Bean3();
 9        }
 10    }

(3)在com.itheima.instance.factory包中,创建Spring配置文件beans3.xml,设置相关配置后,如文件2所示。

文件2 beans3.xml

 1    <?xml version="1.0" encoding="UTF-8"?>
 2    <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4        xsi:schemaLocation="http://www.springframework.org/schema/beans 
 5        http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">
 6        <!-- 配置工厂 -->
 7        <bean id="myBean3Factory" 
 8                class="com.itheima.instance.factory.MyBean3Factory" />
 9        <!-- 使用factory-bean属性指向配置的实例工厂,
 10              使用factory-method属性确定使用工厂中的哪个方法-->
 11        <bean id="bean3" factory-bean="myBean3Factory" 
 12               factory-method="createBean" />
 13    </beans>

在上述配置文件中,首先配置了一个工厂Bean,然后配置了需要实例化的Bean。在id为bean3的Bean中,使用factory-bean属性指向配置的实例工厂,该属性值就是工厂Bean的id。使用factory-method属性来确定使用工厂中的createBean()方法。

(4)在com.itheima.instance.factory的包中,创建测试类InstanceTest3,来测试实例工厂方式能否实例化Bean,编辑后如文件3所示。

文件3 InstanceTest3.java

 1    package com.itheima.instance.factory;
 2    import org.springframework.context.ApplicationContext;
 3    import 
 4        org.springframework.context.support.ClassPathXmlApplicationContext;
 5    public class InstanceTest3 {
 6        public static void main(String[] args) {
 7            // 指定配置文件路径
 8            String xmlPath = "com/itheima/instance/factory/beans3.xml";
 9            // ApplicationContext在加载配置文件时,对Bean进行实例化
 10            ApplicationContext applicationContext = 
 11                    new ClassPathXmlApplicationContext(xmlPath);
 12            System.out.println(applicationContext.getBean("bean3"));
 13        }
 14    } 

执行程序后,控制台的输出结果如图1所示。

图1 运行结果

从图1可以看到,使用实例工厂的方式,同样成功实例化了Bean3。

点击此处
隐藏目录