Spring 源码
2024-01-24 20:07:49 1 举报
AI智能生成
Spring 源码是 Java 平台下的一个开源框架,提供了一种简单的方法来开发企业级应用程序。它的主要特点是依赖注入和面向切面编程。Spring 源码采用分层架构设计,包括核心容器、数据访问/集成、Web、AOP(面向切面编程)、工具、消息和测试模块。Spring 源码中包含了大量的设计模式,如单例模式、工厂模式、代理模式等,使得代码更加简洁、易于维护。此外,Spring 源码还提供了丰富的扩展机制,可以通过自定义 bean、拦截器等来实现个性化需求。总之,Spring 源码是一个功能强大、灵活性高的企业级应用程序开发框架。
作者其他创作
大纲/内容
Spring官网
Spring基础
分支主题
internalConfigurationAnnotationProcessorConfigurationClassPostProcessor.class
internalEventListenerFactoryDefaultEventListenerFactory
internalEventListenerProcessorEventListenerMethodProcessor
internalAutowiredAnnotationProcessorAutowiredAnnotationBeanPostProcessor
internalCommonAnnotationProcessorCommonAnnotationBeanPostProcessor
internalRequiredAnnotationProcessor(已过期)RequiredAnnotationBeanPostProcessor
AnnotationAwareOrderComparator
ContextAnnotationAutowireCandidateResolver
this.reader = new AnnotatedBeanDefinitionReader(this);
负责处理配置类
负责处理@EventListener
1.注册内置PostProcess
this.scanner = new ClassPathBeanDefinitionScanner
2.注册扫描器
register(annotatedClasses);
3.注册配置类
准备工作
new SimpleApplicationEventMulticaster(beanFactory)
initApplicationEventMulticaster()
创建事件多播器
答案:为了懒加载的漏网之鱼
这里思考一个问题:为什么registerListeners注册了一遍监听器在BeanPostProcerssor中又添加一次呢?
refresh->registerListeners将监听器的名字添加到多播器中:applicationListnerBeans
AbstractApplicationContext#applicationListeners
add
在初始化后的BeanPostProcerssor中调用ApplicationListenerDetector将监听器添加到多播器中:applicationListeners
在prepareBeanFactory中注册了BeanPostProcessor
ApplicationListener接口的监听器解析过程
addApplicationListenerMethodAdapter
调用EventListenerMethodProcessor.afterSingletonsInstantiated处理@EventListner
在创世纪Bean定义中注册了2个关于解析@EventListener
@EventListener事件的解析过程
直接调用
onApplicationEnent
ApplicationListener.onApplicationEvent
接口
通过反射调用
ApplicationListenerMethodAdapteronApplicationEvent
注解
SimpleApplicationEventMulticastermultiCastEnent
PublishEnent
监听器
invokeBeanFactoryPostProcess
解析BeanDefinition
1. 解析配置类的注解(@Bean、@Component、@Import...等):ConfigurationClassParser2. 以解析扫描注解为例: 扫描包解析器 ComponentScanParser3. 拿到设置包路径进行扫描: ClassPathBeanDefinitionScanner.doScan()4. 拿到所有的.class判断是否有@Component:5. 判断是否接口、抽象:重写6. BeanDefinitionRegistry注册BeanDefinition
ImportAwareBeanPostProcessor
invokeBeanFactoryPostProcessors
BeanPostProcessorChecker
AutowiredAnnotationBeanPostProcessor
RequiredAnnotationBeanPostProcessor
类图
方法
CommonAnnotationBeanPostProcessor
AbstractBeanFactory.addBeanPostProcessor
registerBeanProcessors
bean后置处理器9处调用
refresh()
注册beanPostProcessor
实例化
循环依赖
属性注入
初始化
doGetBean()
getBean
preInstantiateSingletons
finishBeanFactoryInitialization()
注册bean创建过程
Spring核心 IOC实现
AspectJAutoProxyRegistrar#registerBeanDefinitions
AopConfigUtils#registerAspectJAnnotationAutoProxyCreatorIfNecessary
关系结构图
postProcessBeforeInstantiation
InstantiationAwareBeanPostProcessor
postProcessAfterInitialization
BeanPostProcess
getEarlyBeanReference
SmartInstantiationAwareBeanPostProcessor
AbstractAutoProxyCreator
bean后置处理器9次调用
AnnotationAwareAspectJAutoProxyCreator
AopConfigUtils#registerOrEscalateApcAsRequired
@EnableAspectJAutoProxy
internalAutoProxyCreatorAnnotationAwareAspectJAutoProxyCreator
registerBeanPostProcessors
注册BeanPostProcessors
AbstractAutoProxyCreatorpostProcessBeforeInstantiation
resolveBeforeInstantiation
createBean
解析切面(缓存通知)
AbstractAutoProxyCreatorpostProcessAfterInitialization
applyBeanPostProcessorsAfterInitialization
initalizeBean
doCreateBean
创建代理
JdkDynamicAopProxy为例
调用代理
Spring AOP实现
internalAutoProxyCreatorInfrastructureAdvisorAutoProxyCreator
AutoProxyRegistrar
beanName:internalTransactionAdvisorbeanClass:BeanFactoryTransactionAttributeSourceAdvisor
TransactionAttributeSource
TransactionInterceptor
ProxyTransactionManagementConfiguration
TransactionManagementConfigurationSlector
关键方法
bean的后置处理器9处调用
@EnableTransactionManagement
事务切面解析
解析切面(缓存通知)
创建事务动态代理
initializeBean
Spring 事务实现
JDK版本升级
spring-webflux
Kotlin函数式编程
spring-jcl
支持Junit 5
Spring5 新特性
Spring5 源码(基于spring5)
0 条评论
下一页