springboot的run思路图
2024-04-29 14:39:06 0 举报
AI智能生成
登录查看完整内容
spring启动的源码分析
作者其他创作
大纲/内容
springboot2.5.5
AutowiredAnnotationBeanPostProcessor
CommonAnnotationBeanPostProcessor
PersistenceAnnotationBeanPostProcessor
EventListenerMethodProcessor
DefaultEventListenerFactory
AnnotationConfigUtils.registerAnnotationConfigProcessor初始化内置的BeanPostProcessor
AnnotatedBeanDefinitionReader
用于加载xml中定义的bean
XmlBeanDefinitionReader
ClassPathBeanDefinitionScanner
load->createBeanDefinitionLoader
prepareContext
prepareBeanFactory
postProcessBeanFactory
加载内置的BeanDefinitionRegistryPostProcessor
针对当前 Spring Environment及其PropertySources集解析 bean 定义属性值和@Value注释中的 ${...} 占位符。
PropertySourcesPlaceholderConfigurer
加载内置的BeanFactoryPostProcessor
invokeBeanDefinitionRegistryPostProcessors调用postProcessBeanDefinitionRegistry
invokeBeanFactoryPostProcessors调用postProcessBeanFactory
1.加载自定义的BeanDefinitionRegistryPostProcessor
2.加载自定义的BeanFactoryPostProcessor
外框
invokeBeanFactoryPostProcessors
1.priorityOrderedPostProcessors(不包含MergedBeanDefinitionPostProcessor类型)
2.orderedPostProcessors(不包含MergedBeanDefinitionPostProcessor类型)
3.nonOrderedPostProcessors(不包含MergedBeanDefinitionPostProcessor类型)
4.internalPostProcessors(就是MergedBeanDefinitionPostProcessor类型)
registerBeanPostProcessors
initApplicationEventMulticaster
registerListeners
按照普通bean的方式创建bean
getBean(\"&\"+beanName)的方式判断是FactoryBean后获取之前bean实例化的原始Bean
直接获取getObjectForBeanInstance
通过BeanFactory.getBean获取有区别
FactoryBean
普通的Bean
0.判断是否实现FactoryBean
判断hasInstantiationAwareBeanPostProcessors()是否实现InstantiationAwareBeanPostProcessor
1.resolveBeforeInstantiation
此处可以返回特定bean的cglib动态代理进行增强
createBeanInstance实例化
AutowiredAnnotationBeanPostProcessor.postProcessMergedBeanDefinition
CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinitionfont color=\"#f44336\
applyMergedBeanDefinitionPostProcessors
判断hasInstantiationAwareBeanPostProcessors()是否实现InstantiationAwareBeanPostProcessorfont color=\"#d32f2f\
实现InstantiationAwareBeanPostProcessor调用postProcessAfterInstantiation 如果返回true调用postProcessProperties自定义属性填充
没实现InstantiationAwareBeanPostProcessor 正常填充属性
populateBean属性赋值
BeanNameAware调用setBeanName
BeanClassLoaderAware调用setBeanClassLoader
BeanFactoryAware调用setBeanFactory
invokeAwareMethods
EnvironmentAware
EmbeddedValueResolverAware
ResourceLoaderAware
ApplicationEventPublisherAware
MessageSourceAware
ApplicationStartupAware
ApplicationContextAware
其中一个spring内置的BeanPostProcessorApplicationContextAwareProcessor
applyBeanPostProcessorsBeforeInitialization调用BeanPostProcessor的postProcessBeforeInitialization
调用实现了InitializingBean的afterPropertiesSet
调用Bean的initMethod
invokeInitMethods
applyBeanPostProcessorsAfterInitialization调用BeanPostProcessor的postProcessAfterInitialization
initializeBean初始化
2.doCreateBean
AbstractAutowireCapableBeanFactory.createBean
doGetBean
getBean
1.AbstractBeanFactory
SmartInitializingSingletongetBean之后循环所有的bean调用实现了SmartInitializingSingleton的afterSingletonsInstantiated
2.DefaultListableBeanFactory
DefaultListableBeanFactory.preInstantiateSingletons
finishBeanFactoryInitialization
font color=\"#f44336\
finishRefresh
AbstractApplicationContext.refresh
refreshContext
afterRefresh
可以扩展SpringApplicationRunListener不常用
listeners.started(context)
ApplicationRunner
CommandLineRunner
callRunners
SpringApplication.run
收藏
0 条评论
回复 删除
下一页