Spring Bean生命周期与其有关接口执行时机

1. bean生命周期流程图

2. 涉及接口

InstantiationAwareBeanPostProcessor接口

instantiation 实例化前后执行

InstantiationAwareBeanPostProcessor接口是BeanPostProcessor的子接口,通过接口字面意思翻译该接口的作用是感知Bean实例化的处理器。

方法

描述

postProcessBeforeInitialization

BeanPostProcessor接口中的方法,

在Bean的自定义初始化方法之前执行

postProcessAfterInitialization

BeanPostProcessor接口中的方法

在Bean的自定义初始化方法执行完成之后执行

postProcessBeforeInstantiation

自身方法,是最先执行的方法,它在目标对象实例化之前调用,该方法的返回值类型是Object,我们可以返回任何类型的值。由于这个时候目标对象还未实例化,所以这个返回值可以用来代替原本该生成的目标对象的实例(比如代理对象)。如果该方法的返回值代替原本该生成的目标对象,后续只有postProcessAfterInitialization方法会调用,其它方法不再调用;否则按照正常的流程走

postProcessAfterInstantiation

在目标对象实例化之后调用,这个时候对象已经被实例化,但是该实例的属性还未被设置,都是null。因为它的返回值是决定要不要调用postProcessPropertyValues方法的其中一个因素(因为还有一个因素是mbd.getDependencyCheck());如果该方法返回false,并且不需要check,那么postProcessPropertyValues就会被忽略不执行;如果返回true,postProcessPropertyValues就会被执行

postProcessPropertyValues

对属性值进行修改,如果postProcessAfterInstantiation方法返回false,该方法可能不会被调用。可以在该方法内对属性值进行修改

postProcessBeforeInstantiation方法如果不返回null,将跳过初始化过程

BeanPostProcessor接口

initialization 初始化

该接口我们也叫后置处理器,作用是在Bean对象在实例化和依赖注入完毕后,在显示调用初始化方法的前后添加我们自己的逻辑。注意是Bean实例化完毕后及依赖注入完成后触发的

方法

说明

postProcessBeforeInitialization

实例化、依赖注入完毕,

在调用显示的初始化之前完成一些定制的初始化任务

postProcessAfterInitialization

实例化、依赖注入、初始化完毕时执行

Aware

Aware类型的接口的作用就是让我们能够拿到Spring容器中的一些资源,所有的Aware方法都是在初始化阶段之前调用的

  1. BeanNameAware
  2. BeanClassLoaderAware
  3. BeanFactoryAware
  4. EnvironmentAware
  5. mbeddedValueResolverAware
  6. ApplicationContextAware 其返回都是当前的ApplicationContext对象

BeanFactoryPostProcessor

beanFactory后置处理器, beanFactory初始化后执行

加载所有bean之前,修改应用程序上下文的内部bean工厂里面所有beandefinitions(未实例化)

BeanDefinitionRegistryPostProcessor

BeanFactoryPostProcessor子类,在BeanFactoryPostProcessor之前执行

1. void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)

对现有beanDefinition做一些改变。

2. void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry)

该方法用来注册更多的bean到spring容器中

FactoryBean

FactoryBean是一个工厂Bean,可以生成某一个类型Bean实例,它最大的一个作用是:可以让我们自定义Bean的创建过程,

通过getObject 生成一个bean交给Spring容器管理

InitializingBean

提供初始化bean方法,它只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候都会执行该方法。

该方法将在所有的属性被初始化后调用,但是会在init前调用

如果该bean是实现了InitializingBean接口,并且同时在配置文件中指定了init-method,系统则是先调用afterPropertiesSet方法,然后再调用init-method中指定的方法。

在返回bean之前调用afterPropertiesSet做一些准备操作

DisposableBean

bean销毁时候调用

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值