avatar

spring架构整体

概述

本文尝试从宏观上分析Spring Framework的组织架构

这幅图是官网4.x给出的组织架构,文档

详细描述图

上图是根据模块间构建关系大致画的图

  • 并没有表达一个模块所有的依赖,仅仅是表示了spring内部模块的构建依赖
  • 为了不让图看起来太复杂,有几个模块并没有画出来
分模块
JCL
  • 描述
    实际上该模块通过spi实现了运行时决定整体日志系统,spring并没有使用ServiceLoader
CORE
  • 概述
    • asm包将ASM框架中的类直接重新打包到这里,实际上spring里cglib的实现直接调用这里接口,没有另外使用asm依赖
    • cglib包实现了cglib的一部分封装,供aop实现调用
    • lang包提供了对于jsr305的封装,以及废弃的条件编译注解
    • objenesis包提供了和jdk不同反射构造对象的能力,spring在objenesis框架上做了扩展
    • util包提供了花里胡哨的工具类
    • core:提供了转换器,codec,统一的io等
BEANS
  • 概述
    • 非里层包:BeanWrap体系,PropertyValue体系
    • annotation:一个特别的注解工具类
    • facotry
      • 外部:beanfacotry定义,bean周期接口(initalizingBean…),三个基本aware接口,ObjectFactory
      • annotation:@Autowire,@Configurable,@Value,@Qualifer,以及AGBD,InjectionMetadata元信息
      • config:BD定义,BF的多种接口定义,后处理器接口,PropertyPlaceholderConfigurer,以及一些FactoryBean
      • supprot:DLFC定义,RBD定义,Managed*定义
      • xml:定义了xml解析器,完成xml解析的框架,提供了关于标签处理的parse
    • propertyeditors:类型转换器
  • 大致的知识点
AOP
  • 概述
    • aopalliance:定义了advice,intercept,pointcut等aop中的概念接口
    • framework:这是aop的实现核心逻辑
      • framework.adaptor:适配器,实现advisor到intercept的转换
      • autoproxy:以后处理器为逻辑,实现了spring aop的自动代理
      • 外部:由ProxyFactory为外层接口,实现了对于jdk和cglib代理的实现,这里的入口不支持asepctj语法
    • 外部:定义了如前置advice,后置advice,以及advisor接口
    • supprot:定义了众多的advisor或pointCut实现
  • 大致知识点
INSTRUMENT
  • 概述
    • InstrumentationSavingAgent:是java agent的入口类,该类实际上在spring中作为一个静态类被CONTEXT模块使用
      给需要使用LTW的地方提供了Instrumentation
CONTEXT
文章作者: fancylight
文章链接: https://www.fancylight.top/2020/03/11/spring%E6%9E%B6%E6%9E%84%E6%95%B4%E4%BD%93/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 博客
打赏
  • 微信
    微信
  • 支付寶
    支付寶

评论