[Spring学习]06 Spring Bean的生命周期

一、Spring bean的生命周期

  1. 传统的Java应用中,bean的生命周期为:使用new 进行Bean的实例化,然后使用该Bean。一旦bean不再被使用,则由Java自动进行垃圾回收。
  2. 在Spring框架应用中,所有的Bean对象都有从创建、初始化、服务到销毁的这个过程,我们称之为Bean对象的生命周期。Spring Bean的生命周期比传统的Java应用的生命周期要复杂,但其可扩展性强。

在这里插入图片描述
Spring Bean实例生命周期的执行过程如下:

  • Spring启动,查找并加载需要被Spring管理的Bean,对Bean进行实例化,默认Bean是单例;
  • Spring实例化后对Bean进行依赖注入;
  • 如果Bean实现了BeanNameAware接口,Spring将Bean的id传给setBeanName()方法;
  • 如果Bean实现了BeanFactoryAware接口,Spring将调用setBeanFactory方法,将BeanFactory实例传进来;
  • 如果Bean实现了ApplicationContextAware接口,它的setApplicationContext()方法将被调用,将应用上下文的引用传入到Bean中;
  • 如果Bean实现了BeanPostProcessor接口,它的postProcessBeforeInitialization方法将被调用;
  • 如果Bean实现了InitializingBean接口,Spring将调用它的afterPropertiesSet接口方法,类似的如果Bean使用了init-method属性声明了初始化方法,则再调用该方法;
  • 如果Bean实现了BeanPostProcessor接口,它的postProcessAfterInitialization接口方法将被调用;
  • 此时Bean已经准备就绪,可以被应用程序使用了,他们将一直驻留在应用上下文中,直到该应用上下文被销毁;
  • 若Bean实现了DisposableBean接口,Spring将调用它的distroy()接口方法。如果Bean使用了destroy-method属性声明了销毁方法,则再调用该方法;

二、连接池配置

在Spring配置文件中,我们可以通过配置init-method,destory-method的属性来指定Bean的生命周期方法。

<!-- 比如连接池的配置 -->
<bean id="cPool" class="com.beans.ConnectionPool"
      scope="singleton"
      init-method="init"
      destroy-method="close">
</bean>

在连接池的配置中,我们可以为连接池指定由连接池提供的 init 和 close 的方法来给连接池对象指定生命周期。

在Spring中Bean对象的销毁是由Bean对象的作用域的配置来决定的:
1、singleton 作用域的对象可以在容器关闭时会由Spring调用对象的销毁资源的方法来销毁Bean对象;
2、prototype 作用域的对象可以由容器创建对象,初始化对象,但Spring容器不负责销毁。

三、延时加载机制

在Spring框架应用中,容器初始化时会默认构建所有由Spring管理的对象,但如果这些对象长时间不使用还占着内存就会造成一定的资源浪费,为了解决这个问题,Spring中还提供了一种延时加载机制,以此来提高系统资源的有效使用。

Spring 中的延时加载有两种方式:
1)在bean元素中将 lazy-init 属性的值设为 false,这种方式只对当前设置的单个bean元素有效:

<!-- 例如连接池的延时加载设置 -->
<bean id="cPool" class="com.beans.ConnectionPool"
      scope="singleton"
      init-method="init"
      destroy-method="close"
      lazy-init="false">
</bean>

2)在beans元素中将 default-lazy-init 属性的值设为 true ,这种方式用于指定 beans 标签中所有 bean 的延时加载策略。例如:

<?xml version="1.0" encoding="UTF-8"?>
<beans default-lazy-init="true"
    xmlns="http://www.springframework.org/schema/beans" 
    xsi:schemaLocation="  
       http://www.springframework.org/schema/beans   
       http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">
       
    <bean id="cPool" 
			class="com.beans.ConnectionPool" 
			scope="singleton" 
			init-method="init" 
			destroy-method="destroy">
	 </bean>
	
</beans>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

joinclear

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值