前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >spring @EnableAutoConfiguration实现原理

spring @EnableAutoConfiguration实现原理

作者头像
平凡的学生族
发布2019-05-25 09:25:54
9020
发布2019-05-25 09:25:54
举报
文章被收录于专栏:后端技术后端技术

spring的hook类

  • spring钩子方法
    1. Aware接口族。spring框架对象钩子。
    2. InitializingBean、DisposableBean。初始化、销毁钩子
    3. ImportBeanDefinitionRegistrar。和@Configuration@ImportSelector一样,可用于@Import中,可动态导入Bean。
    4. BeanPostProcessor、BeanFactoryPostProcessor。为Bean的初始化前后提供可扩展的空间。
  • Spring 钩子之BeanFactoryPostProcessor和BeanPostProcessor的源码学习
  • Spring Aware接口---BeanNameAware BeanFactoryAware ApplicationContextAware 有必要让bean了解spring容器对其管理的细节信息,如让bean知道在容器中是以哪个名称被管理的,或者让bean知道beanFactory或这applicationcontext的存在,也就是让该bean可以获取到beanfactory或applicationcontext的实例。
  • spring源码:Aware接口 讲述了各种Aware的实现。
    1. BeanFactoryAware、BeanNameAware、BeanClassLoaderAware是在AbstractAutowireCapableBeanFactory.initializeBean注入的。
    2. 其它Aware是用BeanPostProcessor.postProcessBeforeInitialization注入的。
    3. 可自定义实现Aware接口。实现BeanPostProcessor,并用beanFactory.addBeanPostProcessor(processor);注入spring。
  • InitializingBean的作用可用来修改bean对象的BeanPostProcessor spring为bean提供了两种初始化bean的方式:
    1. 实现InitializingBean.afterPropertiesSet
    2. 在配置文件中通过init-method指定
    3. 用@Bean(initMethod)指定

    1和2可以同时使用。

  • InitializingBean、BeanPostProcessor。 都能在Bean初始化时调用。
    • InitializingBean.afterPropertiesSet()会在所有的属性被初始化后、init前调用。函数不带参数,所以不能修改Bean。
    • BeanPostProcessor函数带参数(Object bean, String beanName),因此可以修改Bean对象。

    它们的区别是:

    • BeanPostProcessor会在所有Bean初始化时调用。而InitializingBean和DisposableBean接口是针对单个bean的

springboot refresh

各种post processor

在refresh中调用了PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors。PostProcessorRegistrationDelegate是AbstractApplicationContext委托执行post processors任务的工具类。

这里的postProcessor包括这几类:

  • BeanFactoryPostProcessor
    • BeanFactoryPostProcessor BeanFactory后置处理器。它的设计目的是在常规BeanFactoryPostProcessor处理BeanFactory(也就是容器)前先对bean注册做处理,比如注册更多的bean,此目的是通过BeanDefinitionRegistryPostProcessor定义的方法postProcessBeanDefinitionRegistry实现的。
    • BeanDefinitionRegistryPostProcessor BeanDefinitionRegistry后置处理器。其实继承自BeanFactoryPostProcessor,是一种特殊的BeanFactoryPostProcessor。
  • BeanPostProcessor

什么是BeanPostProcessor

Spring探秘|妙用BeanPostProcessor ServletWebServerApplicationContext.postProcessBeanFactory中,调用

代码语言:javascript
复制
beanFactory.addBeanPostProcessor(new WebApplicationContextServletContextAwareProcessor(this));

由此涉及到BeanPostProcessor的学习。 实现了接口后,会在Bean的初始化前后调用 postProcessBeforeInitialization和postProcessAfterInitialization。 在代理模式中,这个机制很好用。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.05.21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • spring的hook类
  • springboot refresh
  • 各种post processor
  • 什么是BeanPostProcessor
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档