
3.2 Bean的实例化
在面向对象编程中,如果想使用某个对象,需要事先实例化该对象。同样,在Spring框架中,如果想使用Spring容器中的Bean,也需要实例化Bean。Spring框架实例化Bean有3种方式,即构造方法实例化、静态工厂实例化和实例工厂实例化(其中,最常用的方法是构造方法实例化)。
3.2.1 构造方法实例化
在Spring框架中,Spring容器可以调用Bean对应类中的无参数构造方法来实例化Bean,这种方式称为构造方法实例化。下面通过ch3应用来演示构造方法实例化的过程。
① 创建Web应用ch3
创建一个名为ch3的Web应用,并导入Spring支持和依赖的JAR包,ch3的目录结构如图3.1所示。

图3.1 ch3的目录结构
② 创建BeanClass类
在ch3的src目录下创建instance包,并在该包中创建BeanClass类,代码如下:

③ 创建配置文件
在ch3的src目录下创建Spring的配置文件applicationContext.xml,在配置文件中定义一个id为constructorInstance的Bean,代码如下:

④ 创建测试类
在ch3的src目录下创建test包,并在该包下创建测试类TestInstance,代码如下:

运行上述测试类,控制台的输出结果如图3.2所示。

图3.2 构造方法实例化Bean的运行结果
3.2.2 静态工厂实例化
在使用静态工厂实例化Bean时要求开发者在工厂类中创建一个静态方法来创建Bean的实例。在配置Bean时,class属性指定静态工厂类,同时还需要使用factory-method属性指定工厂类中的静态方法。下面通过ch3应用测试静态工厂实例化。
① 创建工厂类BeanStaticFactory
在instance包中创建工厂类BeanStaticFactory,该类中有一个静态方法来实例化对象,具体代码如下:

② 编辑配置文件
在配置文件applicationContext.xml中添加如下配置代码:

③ 添加测试代码
在测试类TestInstance中添加如下代码:

此时,测试类的运行结果如图3.3所示。

图3.3 实例化Bean的运行结果
3.2.3 实例工厂实例化
在使用实例工厂实例化Bean时要求开发者在工厂类中创建一个实例方法来创建Bean的实例。在配置Bean时需要使用factory-bean属性指定配置的实例工厂,同时还需要使用factory-method属性指定实例工厂中的实例方法。下面通过ch3应用测试实例工厂实例化。
① 创建工厂类BeanInstanceFactory
在instance包中创建工厂类BeanInstanceFactory,该类中有一个实例方法来实例化对象,具体代码如下:

② 编辑配置文件
在配置文件applicationContext.xml中添加如下配置代码:

③ 添加测试代码
在测试类TestInstance中添加如下代码:

此时,测试类的运行结果如图3.4所示。

图3.4 实例化Bean的运行结果