Spring Bean加载全过程(注解配置)

2021-08-14 22:00

阅读:888

标签:数据保存   属性的属性   实例   业务   其他   ethos   关注   ons   context     生产中有很多形式的的配置方式,本文仅分析注解配置。对于其他形式的配置区别主观以为主要在配置文件的解析过程不同,不一一分析了。本文以利用Dubbo框架开发rpc服务端为例详细阐述配置类的解析、数据保存、实例化以及注入到容器中。   通常,涉及到配置参数的框架类,基本都离不开配置的解析及配置的保存;至于配置的具体使用,各框架就自行处理了。对于Spring container而言,配置参数的具体使用就是在实例化Bean的时候使用。所以本文主要分两大部分:1、配置类的解析及数据保存;2、Bean的实例化并注入。   具体配置如下:              跟踪调试Spring的工作流程:        查看这个类的属性:          各属性的属性如下:          构造函数首先初始化reader和scanner, 分别用于记录BeanDefinition和扫描可能的Bean。初始化的过程不是本文分析的重点,但是其后register和refresh操作的基础。初始化之后reader和scanner后,其内部属性如下:        一、配置类的解析及数据保存(register)            通过源码跟踪分析,此过程的最终目的就是将通用的注解配置以的形式保存在DefaultListableBeanFactory的beanDefinitionMap中,使所有的bean全部暴露以便后续使用。   二、Bean的实例化并注入(refresh)     beanDefinitionMap中有很多的bean定义,本文仅关注自定义的配置类providerConfiguration的实例化注入。在模板方法设计模式的文章中,以该方法阐述了实例化注册的大致执行流程。     跟踪调试进入方法invokeBeanFactoryPostProcessors(beanFactory)在context中调用Bean工厂后置处理器依赖处理beanDefinitionMap中的bean定义,将其依赖的bean注入到beanDefinitionMap中。核心方法为processConfigBeanDefinitions(registry),通过该方法即可知其为处理配置bean定义。其处理核心逻辑为:     1、将所有的配置类列出             2、配置解析对象ConfigurationClassParser解析候选配置类保存至ConfigurationClass中:按层次递归处理配置类及其子类             与示例配置类相关的解析注解有@PropertySource、@Import(@EnableDubbo中包含)、@Bean。属性相关的解析不做详细说明,主要阐述@Import/@Bean的解析。     3、@Import与@Bean的处理     在@Enable*原理的文章中,粗略涉及了@EnableDubbo。这里仅此分析@EnableDubbo中涉及动态注册Bean(导入与ImportBeanDefinitionRegistrar相关)处理。在解析器中,通过configClass.addImportBeanDefinitionRegistrar直接将ImportBeanDefinitionRegistrar作为配置类保存至ConfigClass中。            对于dubbo自定义的注解也是@Import动态注册Bean的组合注解:                         同理,@Bean标记的Bean方法应该保存在beanMethos中。   至此,与业务逻辑相关的bean定义全部保存到了configClasses中。最后通过loadBeanDefinitionsForConfigurationClass全部保存至beanDefinitionMap中。接下来的处理才是真正的实例化处理:         未完,待续……                                                  Spring Bean加载全过程(注解配置)标签:数据保存   属性的属性   实例   业务   其他   ethos   关注   ons   context   原文地址:https://www.cnblogs.com/ilovebath/p/14927211.html

上一篇:三种简单的排序

下一篇:css选择器


评论


亲,登录后才可以留言!