spring--扩展点

本文详细介绍了Spring框架中的扩展点,包括BeanFactoryPostProcessor和BeanPostProcessor。BeanFactoryPostProcessor在BeanFactory构建后调用,用于修改BeanDefinition。BeanPostProcessor则在bean初始化时介入,可以修改bean属性或创建动态代理。初始化顺序涉及InitializingBean接口和自定义init-method。同时,文章提到了InstantiationAwareBeanPostProcessor和DisposableBean接口在bean生命周期中的作用。
摘要由CSDN通过智能技术生成

扩展点:
BeanFactoryPostProcessor 构建 BeanFactory后调用,此时BeanFactory , BeanDefinition 已经解析完毕。
BeanPostProcessor 初始化 Bean 对象时调用,所有bean的构建都会调用这个接口的两个方法。两个方法参数传入的bean属性都已经注入完毕。
InitializingBean Bean 实例创建后,所有的属性注入完毕后调用。
定义bean时可以指定init-method  和 destory-method 方法
InstantiationAwareBeanPostProcessor   bean包装类初始化时调用方法

DisposableBean Bean 实例销毁时调用

扩展点调用顺序:
1、调用 BeanFactoryPostProcessor 子类的 postProcessBeanFactory() 方法(工厂必须先创建),这里beanFactory 已经创建,beanDefinition已经解析完毕。
2、调用bean 的构造方法。属性没有初始化(使用的都是默认值),依赖没有注入。
3、调用 BeanPostProcessor.postProcessBeforeInitialization() 方法。(所有bean初始化都会调用)
4、调用 InstantiationAwareBeanPostProcessor.postProcessBeforeInitialization() 方法。(所有bean初始化都会调用)
5、调用bean 定义的 init-method 方法(具体到某个bean的初始化)。
6、如果bean 实现了 InitializingBean 接口,调用 InitializingBean.afterPropertiesSet() 方法(具体到某个bean的初始化)。
7、调用 BeanPostProcessor.postProcessAfterInitialization() 方法。(所有bean初始化都会调用)
8、调用 InstantiationAwareBeanPostProcessor.postProcessAfterInitialization() 方法。(所有bean初始化都会调用)

9、bean 销毁,先调用 destory-method 方法,如果bean实现了DisposableBean接口,再调用DisposableBean.destroy() 方法。

注意:如果使用 javaConfig @Bean注入的bean, bean销毁时会调用 public ovid close(){},  public void shutDown(){} 方法, 相当于这两个方法是默认的销毁实现

 

1、BeanFactoryPostProcessor

此接口只有一个方法:
    void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;
所以就是使用ConfigurableListableBeanFactory 进行扩展。

扩展方式:
这个扩展的地方就是调用 ConfigurableListableBeanFactory 方法进行扩展。
ConfigurableListableBeanFactory 可以分析和修改、预初始化单例Bean,并且可以修改已有的Bean

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值