Bean的生命周期

在使用Spring 的Bean 之前,先要了解Bean 在Spring容器中的生命周期。Spring有两种容器,一种是Bean 工厂,另一种是上下文。Bean 在这两种容器中有着微小的区别,具体如下:

Bean 生命周期:
1.实例化: 容器首先寻找Bean 的定义信息并根据信息实例化Bean(容器使用依赖注入配置Bean 的属性)。
2.调用Bean 的setBeanName()方法(如果Bean 实现了BeanNameAware 接口) 。
3.调用Bean 的setBeanFactory()方法(如果Bean 实现了BeanFactoryAware 接口)。
4.调用Bean 的setApplicationContext()方法(如果Bean 实现了ApplicationConextAware 接口),注意只有Spring 的ApplicationContext 容器才会调用setApplicationContext()方法,而Bean 工厂不会对其调用即使Bean 实现了ApplicationConextAware 接口。
5.调用BeanPostProcessor 的postProcessBeforeInitialization()方法(如果spring的配置文件中配置了BeanPostProcessor 接口的实现类)。
6.调用Bean 自定义的初始化方法(Bean 的初始化方法需要在spring 的配置文件中定义,<bean> 节点的init-method 属性)。
7.调用BeanPostProcessor 的postProcessAfterInitialization()方法(如果spring的配置文件中配置了BeanPostProcessor 接口的实现类)。
8.调用Bean 的destroy()方法(如果Bean 实现了DisposableBean 接口)。
9.调用Bean 自定义的销毁方法(Bean 的销毁方法需要在spring 的配置文件中定义,<bean> 节点的destroy-method 属性)。


接口介绍:
1.BeanNameAware 接口:可以帮助Bean 获取配置文件定义的id 或者 name 属性(知道我是谁)。
方法:setBeanName(java.lang.String)

2.BeanFactoryAware 接口:可以帮助Bean 获得Bean 工厂(知道我在哪里)。
方法:setBeanFactory(org.springframework.beans.factory.BeanFactory)

3.ApplicationContextAware接口:可以帮助Bean 获得应用上下文(知道我在哪里)。
方法:setApplicationContext(org.springframework.context.ApplicationContext)

4.BeanPostProcessor 接口:对spring配置的所有Bean 进行后处理,除了它自己本身。在Bean 工厂中,需要手动注册后处理对象,即在spring 的配置文件中配置的后处理对象不会自动注册。代码如:factory.addBeanPostProcessor(new BeanPostProcessorImpl());,但是在上下中容器中spring 会对在spring 的配置文件中配置的后处理对象自动注册。
方法:postProcessBeforeInitialization(java.lang.Object, java.lang.String):在afterPropertiesSet()方法和Bean 指定的initmethod 方法之前调用。
postProcessAfterInitialization(java.lang.Object, java.lang.String):在afterPropertiesSet() 方法和Bean 指定的initmethod 方法之后调用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值