专栏首页左手java右手goSpring扩展点总结(持续更新)

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

InitializingBean

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

DisposableBean

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

BeanNameAware、ApplicationContextAware和BeanFactoryAware

作用和特点
   获取beanName,ApplicationContext,BeanFactory
例子
   (太常见了,忽略)

FactoryBean

作用和特点
   开发者可以个性化地定制自己想要实例化出来的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创建之前,读取Bean的元属性,并根据自己的需求对元属性进行改变,比如将Bean的scope从singleton改变为prototype
例子
   PropertyPlaceholderConfigurer,替换xml文件中的占位符,替换为properties文件中相应的key对应的value
   dubbo的AnnotationBean扫描注解
   elastic-job的SpringZookeeperRegistryCenter启动基于Zookeeper的注册中心

InstantiationAwareBeanPostProcessor

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

BeanDefinitionRegistryPostProcessor

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

SmartInitializingSingleton

作用和特点
   afterSingletonsInstantiated方法是在非lazy单例Bean实例化完成后的回调方法
例子
   EventListenerMethodProcessor注册 @EventListener 注解的方法

本文分享自微信公众号 - 左手java右手go(gh_e7502321bf3d),作者:邱旭东

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-02-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 玩转Elasticsearch源码-使用Intellij IDEA和remote debug调试源代码

    学习源码第一步就是搭建调试环境,但是看了网上大部分Elasticsearch调试方式都是配置各种环境变量然后直接启动Main方法,而且还各种报错。今天提供新的方...

    左手java右手go
  • 从零搭建精准运营系统

    平台运营到一定阶段,一定会累积大批量的用户数据,这些用户数据是运营人员的黄金财产。而如何利用用户的数据来做运营(消息推送、触达消息、优惠券发送、广告位等),正是...

    左手java右手go
  • 玩转Elasticsearch源码-一张图看懂ES启动流程

    上图中虚线表示进入具体流程,实线表示下一步,为了后面讲解方便每个步骤都加了编号。 先简单介绍下启动流程主要涉及的类:

    左手java右手go
  • Spring Bean 生命周期流程

    happyJared
  • 谈谈 Spring Bean 的生命周期和作用域?

    首先,创建 Bean 会经过一系列的步骤,主要包括: 实例化 Bean 对象。 设置 Bean 属性。 如果我们通过各种 Aware 接口声明了依赖关系,...

    葆宁
  • Spring的 Bean 注解和生命周期

    使用 @Autowired 注解自动装配 bean,要想把类标识成可用于 @Autowired 注解自动装配的 bean 的类,采用以下注解可实现:

    happyJared
  • Spring学习笔记3_Bean 获取与实例化

    本章目录 Spring学习笔记3_Bean 获取与实例化 1.ApplicationContext与BeanFactory关系 2.Bean的实例化方式 ...

    Java学习
  • Spring中Bean及@Bean的理解

    1、Java面向对象,对象有方法和属性,那么就需要对象实例来调用方法和属性(即实例化);

    Java编程指南
  • JavaEE开发之Spring中Bean的作用域、Init和Destroy方法以及Spring-EL表达式

    上篇博客我们聊了《JavaEE开发之Spring中的依赖注入以及AOP》,本篇博客我们就来聊一下Spring框架中的Bean的作用域以及Bean的Init和De...

    lizelu
  • Spring Bean的生命周期Spring简介bean对象生命周期管理

    JavaEdge

扫码关注云+社区

领取腾讯云代金券