spring源码
2022-03-08 20:13:36 0 举报
spring 源码
作者其他创作
大纲/内容
@AnnotationConfigApplictionContext配置扫描的包路径
根据BeanDefinition类型的不同,调用parse不同的重载方法,实际上最终都是调用processConfigurationClass()方法
parser.parse(candidates);
processImports()
BeanDefinition
obtainFreshBeanFactory()
BeanFactory
将马上要进行处理的registry对象的id值放到已经处理的集合对象中
通过递归方法进行解析
定位、加载、解析、注册相关注解
BeanFactory去创建bean
分布式事务
ConfigurationClassPostProcessor先去创建创建bean的bean
其他流程待补充
// 执行找到的DeferredImportSelector// DeferredImportSelector是ImportSelector的一个子类// ImportSelector被设计成和@Import注解同样的效果,但是实现了ImportSelector的类可以条件性的决定导入某些配置// DeferredImportSelector的设计魔都是在所有其他的配置类被处理后才进行处理
prepareRefresh()
@Componentclass
BeanDefinitionbean的注册信息,创建一个什么样的bean的说明
factory
调用各种beanFactory处理器
finishBeanFactoryInitialization
将解析的配置类存储起来,这样回到parse方法时,能取到值
实例化ConfigurationClassParser类,并初始化相关的参数,完成配置类的解析工作
处理加了@Bean注解的方法,将@Bean方法转化为BeanMethod对象,
@ApplicationContext
解析父类
解析带有@Controller、@Import、@ImportResource、@ComponentScan、@ComponentScans、@Bean的BeanDefinition
根据注解元数据和beanName解析配置文件,有注解元数据
获取名字对应的bean实例,添加到currentRegistryProcessors中
AOP
invokeBeanFactoryPostProcessors(beanFactory)
此处就是将自定义的bean加载到IOC容器,因为扫描到的类可能也添加了@ComponentScan和@ComponentScans注解,因此需要进行递归解析
解析各种注解
BeanDefnitionScanner去扫描对应路径下的bean
finishBeanFactoryInitialization(beanFactory)
retrieveBeanMethodMetadata(sourceClass)
Spring
结束
processPropertySource(propertySource);
IOC
ConfigurationClassPostProcessor#postProcessBeanDefinitionRegistry
getBean判断是否是FactoryBean,从一级缓存拿,没有再调用createBean
获取到当前应用程序上下文的beanFactoryPostProcessors变量的值,并且实例化调用执行所有已经注册的beanFactoryPostProcessor
核心处理类,此处完成自动配置功能
存放在BeanDefinitionMap中
registryProcessor.postProcessBeanDefinitionRegistry(registry)
handler.processGroupImports();
AbstractApplicationContext#refresh
processConfigBeanDefinitions(registry
XmlApplicationContext
BeanDefinitionReader读取需要被创建的bean
处理接口的默认方法实现,从jdk8开始,接口中的方法可以有自己的默认实现,因此如果这个接口的方法加了@Bean注解,也需要被解析
处理@PropertySource注解
添加到对应的集合对象中
处理@Import注解
Ioc
this.registriesPostProcessed.add(registryId)
BeanDefinitionRegistry把bean的一些定义注册进来
Bean
处理配置类的bean定义信息
this.deferredImportSelectorHandler.process();
postProcessBeanFactory(beanFactory)
this.deferredImportSelectorHandler.process()
0 条评论
下一页