Spring配置类解析流程
2021-05-11 13:52:13 14 举报
Spring配置类解析流程是Spring框架中非常重要的一环,它主要负责解析XML配置文件、注解以及Java代码,将它们转换成可执行的Bean对象。具体来说,Spring容器首先会加载XML配置文件或注解,然后通过反射机制创建Bean实例,并将这些Bean实例注册到容器中。在解析过程中,Spring还会进行一些必要的处理,比如类型转换、依赖注入等。最后,当应用程序需要使用某个Bean时,Spring容器会根据配置文件或注解中的信息来查找对应的Bean对象,并将其返回给应用程序。总之,Spring配置类解析流程是一个非常复杂的过程,但它为开发者提供了一种便捷的方式来管理和使用各种Bean对象。
作者其他创作
大纲/内容
处理@Bean
递归调用processConfigurationClass()方法,处理当前类配置类,会把这些类添加到configurationClasses中
扫描指定路径得到BeanDefinition集合
解析AppConfig对应的BeanDefinition
每个ConfigurationClass解析完了之后,就会把ConfigurationClass对象添加到configurationClasses中
把导入的资源路径添加到ConfigurationClass对象中的importedResources属性中
判断是不是一个配置类
调用this.reader.loadBeanDefinitions(configClasses)再次处理ConfigurationClass并得到BeanDefinition并注册
解析出@PropertySource注解所配置的Properties文件路径,封装为Properties对象并添加到Environment中
如果存在
遍历所有内部类
处理子流程
处理@ImportResource注解
把AppConfig封装为一个ConfigurationClass
生成对应的ImportBeanDefinitionRegistrar的实例对象
处理@ComponentScan注解
普通类型
添加到ConfigurationClass对象到importBeanDefinitionRegistrars属性中
ImportBeanDefinitionRegistrar
处理当前ConfigurationClass的importedResources属性,解析所导入的xml文件
整个解析ConfigurationClass结束之后,从configurationClasses中把所有ConfigurationClass取出来
不管是否存在@Component注解
遍历未再次处理过的ConfigurationClass
处理@Import注解
存在
递归处理当前类所实现的接口,查看接口中是否存在@Bean注解了的默认方法
如果内部类也是配置类
处理AppConfig.class,一个ConfigurationClass对象processConfigurationClass()方法
调用processImports()方法处理所导入的类
递归调用processImports()方法处理所得到的类
处理当前ConfigurationClass的importBeanDefinitionRegistrars属性,执行registerBeanDefinitions()方法进行BeanDefinition的注册
递归调用processConfigurationClass()方法,处理新的配置类
是在存在@Component注解
处理@PropertySource注解
AppConfig中是否存在内部类
ImportSelector
执行selectImports()方法,得到多个类
如果当前ConfigurationClass有@Bean方法,那么则通过该方法生成BeanDefinition并注册
判断所导入的Class的类型
如果当前ConfigurationClass是通过@Import导入进来的,则通过importBeanNameGenerator生成一个beanName,并生成一个BeanDefinition注册到BeanFactory中去
递归解析父类
遍历BeanDefinition
把加了@Bean注解的Method对象添加到ConfigurationClass对象的beanMethods属性中
0 条评论
下一页