Spring Bean生命周期

被IOC容器管理的bean的生命周期如下:

  1. 通过构造器或工厂方法创建 Bean 实例

  2. 为 Bean 的属性设置值和对其他 Bean 的引用

  3. 如果Bean实现了BeanNameAware接口,Spring将Bean的ID传递给setBeanName()接口方法。

  4. 如果Bean实现了BeanFactoryAware接口,Spring将调用setBeanFactory()方法,把BeanFactory的实现传入给Bean。

  5. 如果Bean实现了ApplicationContextAware接口,Spring将调用setApplicationContext()接口方法,把Application传入给Bean。

  6. 如果Bean实现了InitializingBean接口,Spring将调用他的afterPropertiesSet方法。类似的,如果配置Bean的时候使用init-method生命了初始化方法,改方法也会在此时调用。

  7. 如果Bean实现了BeanPostProcessor接口,或者有全局的BeanPostProcessor实现,Spring将调用他的postProcessBeforeInitialization方法。

  8. 如果Bean实现了BeanPostProcessor接口,或者有全局的BeanPostProcessor实现,Spring将调用他的postProcessBeforeInitialization方法。

  9. Bean准备就绪,可以被调用了。一直保留在上下文中,直到上下文销毁。

  10. 当容器关闭时, 如果Bean实现了DisposableBean接口,Spring将调用他的destroy方法。类似的,如果配置Bean的时候使用destory-method生命了初始化方法,改方法也会在此时调用。

Bean的初始化和销毁:

到bean的初始化和销毁,也就是到了第7步和第10步,我们可以做出单独的处理。

实现方法:

方法一

为Bean定义初始化和销毁操作,只需要使用init-method和destroy-method参数来配置Bean即可,分别指定了对应时刻要调用的方法。

 

方法二

实现InitializingBean和DisposableBean接口,分别实现afterPropertiesSet()方法和destroy()方法,来达到初始化和销毁的目的;

第二种方法的好处是Spring能够自动的检测实现了这些接口的Bean,而无需额外的配置,缺点是Bean与Spring的API产生了耦合,通常只有在开发一个明确在Spring容器中使用的Bean的时候才会使用第二种方法;

方法三

默认的init-method和destroy-method:

如果在上下文中很多Bean都拥有相同名字的初始化方法和销毁方法,没必要为每一个Bean声明init-method和destroy-method属性,可以使用<beans>元素的default-init-method和default-destroy-method属性:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"

default-init-method="method1"

default-destroy-method="method2">

......

</beans>

这样,如果Bean有对应的方法,就会执行,没有的话,就什么也不做。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值