实例化 Bean
实例化 Bean就是创建 Bean 对象,在 Spring 容器中,实例化 Bean 有三种方式
- 构造函数实例化
- 静态工厂方法实例化
- 实例工厂方法实例化
构造函数实例化
通过构造函数实例化 Bean 是最简单的方式。Spring 容器会通过调用 Bean 对应类中默认的构造函数进行实例化 Bean
现有一个 Bean 定义如下
1 | public class Person { |
在 Spring 中的配置如下
1 | <bean class="me.zyp.entity.Person" id="person"/> |
可通过如下方式获取对应 Bean 对象
1 |
|
静态工厂方法实例化
该方法可以通过提供一个静态工厂来实例化 Bean
1 | public class StaticPersonFactory { |
该工厂在 Spring 中的配置如下
1 | <bean class="me.zyp.factory.StaticPersonFactory" factory-method="createInstance" id="staticPersonFactory"/> |
具体配置属性含义如下:
- class:静态工厂的全类名
- factory-method:静态工厂中用于创建对象的静态方法
可通过如下方式获取对应 Bean 对象
1 |
|
实例工厂方法实例化
与通过静态工厂方法实例化不同,该方法会通过调用对应工厂的实例化对象指定的非静态方法来创建一个新的 bean
1 | public class InstancePersonFactory { |
该工厂在 Spring 中的配置如下
1 | <bean class="me.zyp.factory.InstancePersonFactory" id="instancePersonFactory"/> |
具体配置属性含义如下:
- factory-bean:对应实例工厂的 bean 定义
- factory-method:工厂中用于实例化 bean 的方法名
可通过如下方式获取对应 Bean 对象
1 |
|
特点
- 在 Bean 定义中
factory-bean
属性用于指定实例化工厂 - 当
factory-bean
属性与class
属性同时出现时,class
属性不生效 - 当只使用
class
时,则class
属性用于指定静态工厂,且此时factory-method
对应的方法必须为静态方法 - 当使用
factory-bean
属性指定实例工厂时,factory-method
对应的方法必须为非静态方法