spring对Bean对象的管理细节

Posted by 好记性不如烂笔头 on 03-29,2020

spring对Bean对象的管理细节

创建Bean对象的三种方式

  • 使用默认的构造函数创建:在spring配置文件中使用bean标签,配以id和class属性之后,且没有其他属性和标签时,采用的就是默认的构造方法,如果没有默认的构造方法,将会错误。
<!--将会通过Product类的默认构造方法创建,没有的话就会报错-->
<bean id="product" class="Product"/>
  • 使用普通工厂中的方法创建对象(或使用某个类的方法创建对象,并存入spring容器)。
<!--指定了要获取的对象id,工厂对象id,以及工厂中的方法-->
<bean id="instanceFactory" class="InstanceFactory"/>
<bean id="product" factory-bean="instanceFactory" factory-method="getProduct"/>
  • 使用静态工厂中的静态方法创建对象(或使用某个类的静态方法创建对象,并存入spring容器)。
<!--指定了静态工厂的类名,以及工厂中的方法-->
<bean id="Product" class="StaticFactory" factory-method="getProduct"/>

Bean的作用范围

bean标签的scope属性就是用来指定bean的作用范围。取值有:

  1. singleton:单例对象(scope的默认值)
  2. prototype:多例对象
  3. request:作用于web应用的请求范围
  4. session:作用于web应用的会话范围
  5. global-session:作用于集群环境的会话范围,当不是集群环境时,和session一样

Bean的生命周期

生命周期也就是:创建,活着,死亡

  • 单例对象:当容器创建时创建,只要容器还在就一直活着,容器销毁时死亡。也就是单例生命周期和容器生命周期相同
  • 多例对象:当使用对象时spring框架创建,只要是在使用过程就一直活着,随着JVM垃圾回收而死亡。