
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 注解的方法

歡迎您掃一掃上面的二維碼關注個人微信公眾號