前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring扩展点总结(持续更新)

Spring扩展点总结(持续更新)

作者头像
左手java右手go
发布2019-08-20 16:00:58
9710
发布2019-08-20 16:00:58
举报
文章被收录于专栏:左手java右手go左手java右手go

InitializingBean

代码语言:javascript
复制
作用和特点
   Bean属性都设置完毕后调用afterPropertiesSet()方法做一些初始化的工作
例子
   dubbo的ServiceBean暴露服务(export)

DisposableBean

代码语言:javascript
复制
作用和特点
   Bean生命周期结束前调用destory()方法做一些收尾工作
例子
   dubbo的ServiceBean注销服务(unexport)

BeanNameAware、ApplicationContextAware和BeanFactoryAware

代码语言:javascript
复制
作用和特点
   获取beanName,ApplicationContext,BeanFactory
例子
   (太常见了,忽略)

FactoryBean

代码语言:javascript
复制
作用和特点
   开发者可以个性化地定制自己想要实例化出来的Bean
例子
   mybatis的MapperFactoryBean获取mapper接口实例对象
   mybatis的SqlSessionFactoryBean通过buildSqlSessionFactory获取sqlSessionFactory实例对象
   dubbo的ReferenceBean获取refrence接口实例对象
   spring-boot通过PropertiesConfigurationFactory的bindPropertiesToTarget绑定配置属性到对象

BeanPostProcessor

代码语言:javascript
复制
作用和特点
   postProcessBeforeInitialization:在初始化Bean之前做一些处理
   postProcessAfterInitialization:在初始化Bean之后做一些处理
   注意:这两个方法是有返回值的,不要返回null,否则getBean的时候拿不到对象
例子
   ConfigurationPropertiesBindingPostProcessor重写postProcessBeforeInitialization绑定Properties属性到@ConfigurationProperties注解的对象

BeanFactoryPostProcessor

代码语言:javascript
复制
作用和特点
   Bean创建之前,读取Bean的元属性,并根据自己的需求对元属性进行改变,比如将Bean的scope从singleton改变为prototype
例子
   PropertyPlaceholderConfigurer,替换xml文件中的占位符,替换为properties文件中相应的key对应的value
   dubbo的AnnotationBean扫描注解
   elastic-job的SpringZookeeperRegistryCenter启动基于Zookeeper的注册中心

InstantiationAwareBeanPostProcessor

代码语言:javascript
复制
作用和特点
   继承BeanPostProcessor
   Bean实例化前后做一些逻辑处理
   Bean构造出来之前调用postProcessBeforeInstantiation()方法
   Bean构造出来之后调用postProcessAfterInstantiation()方法
   填充属性前调用postProcessPropertyValues()方法
   spring建议继承InstantiationAwareBeanPostProcessorAdapter,重写相应的方法即可
例子
   AutowiredAnnotationBeanPostProcessor通过重写postProcessPropertyValues注入autowired依赖
   BeanNameAutoProxyCreator,基于beanName创建代理,就是应用了这个接口,在生成bean前生成代理bean,从而替代默认的实例化。

BeanDefinitionRegistryPostProcessor

代码语言:javascript
复制
作用和特点
   继承了BeanFactoryPostProcessor接口    postProcessBeanDefinitionRegistry方法可以修改在BeanDefinitionRegistry接口实现类中注册的任意BeanDefinition
   也可以增加和删除BeanDefinition例子    mybatis中MapperScannerConfigurer在只有接口没有实现类的情况下找到接口方法与sql之间的联系从而生成BeanDefinition并注册    spring的ConfigurationClassPostProcessor将注解@Configuration中的相关生成bean的方法所对应的BeanDefinition进行注册

SmartInitializingSingleton

代码语言:javascript
复制
作用和特点
   afterSingletonsInstantiated方法是在非lazy单例Bean实例化完成后的回调方法
例子
   EventListenerMethodProcessor注册 @EventListener 注解的方法
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-02-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 左手java右手go 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • InitializingBean
  • DisposableBean
  • BeanNameAware、ApplicationContextAware和BeanFactoryAware
  • FactoryBean
  • BeanPostProcessor
  • BeanFactoryPostProcessor
  • InstantiationAwareBeanPostProcessor
  • BeanDefinitionRegistryPostProcessor
  • SmartInitializingSingleton
相关产品与服务
微服务引擎 TSE
微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档