Spring中实例化bean的三种方式

179 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第7天

Bean的实例化

在原生java中,我们通过new来进行实例化,在Spring中,Spring容器提供了三种实例化方式:

  1. 构造方法实例化
  2. 静态工厂实例化
  3. 实例工厂实例化
构造方法实例化

构造方法实例化是指Spring容器通过Bean对应类中默认的无参构造方法来实例化Bean

整个过程:

  1. 创建maven项目,然后在项目的pom.xml文件中配置需使用到的Spring四个基础包和Spring的依赖包
  2. 创建对应包,在包里创建User类,里面只需要有构造函数
  3. 创建applicationBean.xml作为Bean类的配置文件,在该配置文件中定义一个id为bean的Bean,并通过class属性指定其对应的实现类为User
  4. 创建测试类,在main方法中通过加载applicationBean.xml配置文件初始化Spring容器,再通过Spring容器生成User类的实例user1,用来测试构造方法能否实例化User
  5. 运行测试类,创建完成
静态工厂实例化

使用静态工厂方式实例化Bean,要求创建一个静态工厂方法来创建Bean实例,此时,Bean配置文件中的class属性不再是Bean实例的实现类,而是工厂类。同时还需使用factory-method属性指定所定义的静态工厂方法。

整个过程:

  1. 创建maven项目,然后在项目的pom.xml文件中配置需使用到的Spring四个基础包和Spring的依赖包
  2. 创建对应包,在包里创建User类,同样里面只需要有构造函数
  3. 创建一个MyBeanFactory类,在该类中定义一个静态方法createUser(),用于创建User的实例。createBean()方法返回User实例
  4. 创建applicationBean.xml作为Bean类的配置文件,在该配置文件中定义一个id为bean的Bean,class属性为工厂全类名,另定义factory-method属性来指定创建Bean的静态方法
  5. 创建测试类进行测试
实例工厂实例化

不再使用静态方法创建Bean实例,而是采用直接创建Bean实例的方式。

在XML配置文件中,不使用class属性指向所属的类,而是通过factory-bean属性指向为Bean配置的实例工厂,并使用factory-method属性指定要调用的实例工厂中的方法。

整个过程:

  1. 创建maven项目,然后在项目的pom.xml文件中配置需使用到的Spring四个基础包和Spring的依赖包
  2. 创建对应包,在包里创建User类,还是里面只需要有构造函数
  3. 创建一个MyBeanFactory类,在该类中定义一个无参构造方法,定义createBean()(注意不是静态)用于创建User的实例。
  4. 创建applicationBean.xml,需要定义两个bean,一个是工厂(id和class),一个是实例(id、factory-bean指向配置的实例工厂id,factory-method属性来指定创建Bean的方法)