学科分类
目录
SSM框架

静态工厂方式实例化

使用静态工厂是实例化Bean的另一种方式,该方式要求开发者创建一个静态工厂的方法来创建Bean的实例,其Bean配置中的class属性所指定的不再是Bean实例的实现类,而是静态工厂类,同时还需要使用factory-method属性来指定所创建的静态工厂方法。下面通过一个案例来演示如何使用静态工厂方式实例化Bean。

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

(2)在com.itheima.instance.static_factory包中,创建一个MyBean2Factory类,并在类中创建一个静态方法createBean()来返回Bean2实例,如文件1所示。

文件1 MyBean2Factory.java

 1    package com.itheima.instance.static_factory;
 2    public class MyBean2Factory {    
 3        //使用自己的工厂创建Bean2实例
 4        public static Bean2 createBean(){
 5            return new Bean2();
 6        }
 7    }

(3)在com.itheima.instance.static_factory包中,创建Spring配置文件beans2.xml,编辑后如文件2所示。

文件2 beans2.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        <bean id="bean2" 
 7                class="com.itheima.instance.static_factory.MyBean2Factory" 
 8               factory-method="createBean" />
 9    </beans>

在上述配置文件中,首先通过<bean>元素的id属性定义了一个名称为bean2的Bean,然后由于使用的是静态工厂方法,所以需要通过class属性指定其对应的工厂实现类为MyBean2Factory。由于这种方式配置Bean后,Spring容器不知道哪个是你所需要的工厂方法,所以增加了factory-method属性来告诉Spring容器,其方法名称为createBean。

(4)在com.itheima.instance.static_factory包中,创建一个测试类InstanceTest2,来测试使用静态工厂方式是否能实例化Bean,编辑后如文件3所示。

文件3 InstanceTest2.java

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

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

图1 运行结果

从图1可以看到,使用自定义的静态工厂方法,已成功实例化了Bean2。

点击此处
隐藏目录