美文网首页
Bean的生命周期

Bean的生命周期

作者: 匿名wm | 来源:发表于2018-09-22 16:04 被阅读0次

1.通过BeanFactory或者ApplicationContext获取实例Bean

2.set属性注入

3.如果Bean实现BeanNameAware接口,则调用setBeanName(String name)方法设置Bean的name属性

4.如果Bean实现BeanFactoryAware接口,则调用setBeanFactory(BeanFactory beanFactory)方法,设置创建该Bean的工厂

5.如果有定义BeanPostProcessor接口,则调用该接口的postProcessBeforeInitialization(Object bean, String beanName)方法

该方法可以对Bean实例进行额外的增加处理操作。可以是全局针对所有Bean进行统一处理,ApplicationContext初始化时会自动找到实现该接口的类进行所有Bean的增强处理。

6.如果Bean实现了InitializingBean接口,且该接口有 @PostConstruct修饰的方法,则执行该方法(该注解方法是在BeanPostProcessor的postProcessBeforeInitialization中执行的),然后执行afterPropertiesSet()方法;

该方法没有参数,不能对该Bean进行处理,可以增加比如日志、读取配置文件之类的操作。

7.如果Bean自定义了init-method指定的方法,则调用该方法

8.接着调用BeanPostProcessor接口的postProcessAfterInitialization(Object bean, String beanName)方法

9.如果Bean实现了DisposableBean接口,则调用该接口的destory()方法。同InitializingBean类似,该接口如果有指定@PreDestory注解修饰的方法,也会先调用该方法。

10.如果Bean指定了destory-method方法,则执行该方法

以上为Bean生命周期顺序。

说明:

1.afterPropertiesSet()和init-method有什么区别

afterPropertiesSet()依赖InitializingBean接口实现,Bean定义时必须实现该接口才能使用,对代码有一定的侵入。init-method只需要指明要调用哪个方法就可以了。同理DiaposableBean的destory()方法和destory-method。

但是afterPropertiesSet()执行效率比init-method指定的方法高,该方法是直接调用执行,而init-method指定的方法需要通过反射调用。

init-method和destory-method指定的方法必须是一个无参的方法,否则,初始化会报错。

相关文章

网友评论

      本文标题:Bean的生命周期

      本文链接:https://www.haomeiwen.com/subject/jrhxoftx.html