AI
推荐
模板社区
专题
登录
免费注册
首页
思维导图
详情
spring代码流程
2023-04-21 15:42:30
0
举报
分享方式
仅支持查看
AI智能生成
1
资产管理
模板推荐
作者其他创作
大纲/内容
new AnnotationConfigApplicationContext(AppConfig.class);
this();
初始化Factory
初始化reader 注册开天辟地5个bd
bdMap添加:ConfigurationClassPostProcessor
bdMap添加:AutowiredAnnotationBeanPostProcessor
bdMap1添加:CommonAnnotationBeanPostProcessor
bdMap添加:DefaultEventListenerFactory、EventListenerMethodProcessor
初始化scanner
register(componentClasses);
this.reader.register(componentClasses);
BeanDefinitionReaderUtils.registerBeanDefinition(definitionHolder, this.registry);
refresh();
invokeBeanFactoryPostProcessors前
invokeBeanFactoryPostProcessors(beanFactory);
ConfigurationClassPostProcessor
BeanDefinitionRegistryPostProcessors.postProcessBeanDefinitionRegistry
基于注册表构建和验证配置模型 processConfigBeanDefinitions (人话:扫描指定包下的类@Bean、@Import、@Component、@ComponentSacn等)
获取候选的(@Configuration的类)放入configCandidates集合中
创建@Configration的配置类的解析器并开始解析:ConfigurationClassParser
parse----processConfigurationClass
doProcessConfigurationClass
解析@Component的注解
解析@PropertySources注解
解析@ComponentScan注解
处理@Import注解
ImportSelector类型
ImportBeanDefinitionRegistrar类型
其他类型
处理@ImportResource注解
处理本身的 @Bean方法
处理默认的接口方法
解析收集完成后,进行缓存 this.configurationClasses.put(configClass, configClass);
注册扫描到的类的bd
BeanFactoryPostProcessor.postProcessBeanFactory
enhanceConfigurationClasses
判断是否是一个全配置类并进行ConfigurationClassEnhancer增强
其他实现BeanFactoryPostProcessor后置处理器
注册bean后置处理器 registerBeanPostProcessors(beanFactory);
finishBeanFactoryInitialization(beanFactory);
getBean----doGetBean
transformedBeanName 检查bean名称是否合法
处理dependsOn,保证当前 bean 所依赖的 bean 的初始化。当前bean是否有关联bean
创建:getSingleton----createBean
resolveBeanClass
resolveBeforeInstantiation
AbstractAutoProxyCreator
doCreateBean
createBeanInstance(beanName, mbd, args);
instantiateUsingFactoryMethod
判断构造方法是否被解析过
determineConstructorsFromBeanPostProcessors
SmartInstantiationAwareBeanPostProcessor.determineCandidateConstructors (子类)AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors()
处理@LookUp
从candidateConstructorsCache缓存中拿
找“构造方法”
放入缓存candidateConstructorsCache,并返回
根据上面推断的构造方法执行构造: autowireConstructor or instantiateBean
autowireConstructor
instantiateBean
执行默认:constructorToUse = clazz.getDeclaredConstructor();
判断是否支持循环依赖
addSingletonFactory(beanName, () -> getEarlyBeanReference(beanName, mbd, bean));
addSingletonFactory(String beanName, ObjectFactory<?> singletonFactory)
getEarlyBeanReference(beanName, mbd, bean)
wrapIfNecessary(bean, beanName, cacheKey);
属性填充populateBean
初始化initializeBean(beanName, exposedObject, mbd);
收藏
立即使用
spring代码流程
152299_PO
职业:暂无
去主页
Collect
Get Started
代码定位
Collect
Get Started
代码模块包名
Collect
Get Started
物料代码管理
Collect
Get Started
Spring技术
评论
0
条评论
下一页
图形选择
思维导图
主题
补充说明
AI生成
修改AI描述
去编辑
重新生成
提示
关闭后当前内容将不会保存,是否继续?
取消
确定
Document