静态工厂方式实例化
使用静态工厂是实例化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。