Spring基本用法4——创建Bean的三种方式

        前言:在大多数情况下,Spring容器直接通过new关键字调用构造器来创建Bean实例,而class属性指定了Bean实例的实现类。因此,<bean../>元素必须指定Bean实例的class属性,但这并不是实例化Bean的唯一方法,本文介绍三种实例化Bean的方法。

本篇文章重点关注以下问题:

  • 调用构造器创建Bean;
  • 调用静态工厂方法创建Bean;
  • 调用实例工厂方法创建Bean。

1. 使用构造器创建Bean

        使用构造器创建Bean有两种可能情况,一是不采用构造注入,Spring底层调用Bean类的无参数构造器来创建实例,二是采用构造注入时,Spring容器使用带对应参数的构造器来创建Bean。

1.1 不采用构造注入

        不采用构造注入时,Spring底层会调用Bean类的无参数构造器来创建实例,因此要求该Bean类提供无参数的构造器。在这种情况下class元素是必须的(除非采用继承),class属性的值就是Bean实例的实现类。

       当Spring使用默认构造器来创建Bean实例时,Spring对Bean实例的所有属性执行默认初始化,即所有基本类型的值初始化为0或false;所有引用类型的值初始化为null。同时,Spring会根据配置文件决定的依赖关系,先实例化被依赖的Bean实例,然后为Bean注入依赖关系,最后将一个完整的Bean实例返回给程序。

1.2 采用构造注入

         如果采用构造注入,则要求配置文件为<bean../>元素添加<constructor-arg../>子元素,每个<constructor-arg../>子元素配置一个构造器参数。Spring容器将使用带对应参数的构造器来创建Bean实例,Spring调用构造器传入的参数即可用于初始化Bean的实例,最后也将一个完整的Bean实例返回给程序。

       注:对于 使用构造器创建Bean的实例可见http://super-wangj.iteye.com/admin/blogs/2383803一文,在此不过多阐述。

2. 使用静态工厂方法创建Bean

       使用静态工厂方法创建Bean实例时,需指定两个属性:

  • class:该属性的值为静态工厂类的类名。(Spring通过该属性知道由哪个工厂类来创建Bean)
  • factory-method:该属性指定静态工厂方法来生产Bean实例。(工厂方法必须是静态的)
        注:如果静态工厂方法需要参数,则使用<constructor-arg../>元素传入。 2.1 定义Bean:一个接口及其两个实现

猜你喜欢

转载自super-wangj.iteye.com/blog/2385097