Spring擴展點總結(jié)(持續(xù)更新)

spring擴展點.png

InitializingBean

作用和特點
    Bean屬性都設置完畢后調(diào)用afterPropertiesSet()方法做一些初始化的工作
例子
    dubbo的ServiceBean暴露服務(export)

DisposableBean

作用和特點
    Bean生命周期結(jié)束前調(diào)用destory()方法做一些收尾工作
例子
    dubbo的ServiceBean注銷服務(unexport)

BeanNameAware、ApplicationContextAware和BeanFactoryAware

作用和特點
    獲取beanName,ApplicationContext,BeanFactory
例子
    (太常見了,忽略)

FactoryBean

作用和特點
    開發(fā)者可以個性化地定制自己想要實例化出來的Bean
例子
    mybatis的MapperFactoryBean獲取mapper接口實例對象
    mybatis的SqlSessionFactoryBean通過buildSqlSessionFactory獲取sqlSessionFactory實例對象
    dubbo的ReferenceBean獲取refrence接口實例對象
    spring-boot通過PropertiesConfigurationFactory的bindPropertiesToTarget綁定配置屬性到對象

BeanPostProcessor

作用和特點
    postProcessBeforeInitialization:在初始化Bean之前做一些處理
    postProcessAfterInitialization:在初始化Bean之后做一些處理
    注意:這兩個方法是有返回值的,不要返回null,否則getBean的時候拿不到對象
例子
    ConfigurationPropertiesBindingPostProcessor重寫postProcessBeforeInitialization綁定Properties屬性到@ConfigurationProperties注解的對象

BeanFactoryPostProcessor

作用和特點
    Bean創(chuàng)建之前,讀取Bean的元屬性,并根據(jù)自己的需求對元屬性進行改變,比如將Bean的scope從singleton改變?yōu)閜rototype
例子
    PropertyPlaceholderConfigurer,替換xml文件中的占位符,替換為properties文件中相應的key對應的value
    dubbo的AnnotationBean掃描注解
    elastic-job的SpringZookeeperRegistryCenter啟動基于Zookeeper的注冊中心

InstantiationAwareBeanPostProcessor

作用和特點
    繼承BeanPostProcessor
    Bean實例化前后做一些邏輯處理
    Bean構造出來之前調(diào)用postProcessBeforeInstantiation()方法
    Bean構造出來之后調(diào)用postProcessAfterInstantiation()方法
    填充屬性前調(diào)用postProcessPropertyValues()方法
    spring建議繼承InstantiationAwareBeanPostProcessorAdapter,重寫相應的方法即可
例子
    AutowiredAnnotationBeanPostProcessor通過重寫postProcessPropertyValues注入autowired依賴
    BeanNameAutoProxyCreator,基于beanName創(chuàng)建代理,就是應用了這個接口,在生成bean前生成代理bean,從而替代默認的實例化。

BeanDefinitionRegistryPostProcessor

作用和特點
    繼承了BeanFactoryPostProcessor接口
    postProcessBeanDefinitionRegistry方法可以修改在BeanDefinitionRegistry接口實現(xiàn)類中注冊的任意BeanDefinition
    也可以增加和刪除BeanDefinition
例子
    mybatis中MapperScannerConfigurer在只有接口沒有實現(xiàn)類的情況下找到接口方法與sql之間的聯(lián)系從而生成BeanDefinition并注冊
    spring的ConfigurationClassPostProcessor將注解@Configuration中的相關生成bean的方法所對應的BeanDefinition進行注冊

SmartInitializingSingleton

作用和特點
    afterSingletonsInstantiated方法是在非lazy單例Bean實例化完成后的回調(diào)方法
例子
    EventListenerMethodProcessor注冊 @EventListener 注解的方法
歡迎您掃一掃上面的二維碼關注個人微信公眾號
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容