目录
  1. 1. spring-core模块源码阅读准备
    1. 1.1. 模块组成
    2. 1.2. 模块详解
      1. 1.2.1. asm
        1. 1.2.1.1. asm是什么?
        2. 1.2.1.2. ASM与APT、aspectJ、Javassit
      2. 1.2.2. cglib
        1. 1.2.2.1. cglib是什么?
        2. 1.2.2.2. cglib动态代理与jdk动态代理
      3. 1.2.3. core
      4. 1.2.4. lang
      5. 1.2.5. objenesis
        1. 1.2.5.1. objenesis是什么?
        2. 1.2.5.2. objenesis使用场景
      6. 1.2.6. util
    3. 1.3. spring-core模块功能
    4. 1.4. 文献引用
spring-core模块源码阅读准备

spring-core模块源码阅读准备

模块组成

  1. asm
  2. cglib
  3. core
  4. lang
  5. objenesis
  6. util

模块详解

asm

asm是什么?
  1. asm是一个java字节码操控框架(修改字节码),它能被用来动态生成或者增强现有类的功能,是cglib技术的基础。
  2. asm使用访问者模式实现,java类作为需要访问的元素,而asm框架定义java类的访问者,所有的对java类的操作都在访问者这里完成。
ASM与APT、aspectJ、Javassit

aop

  1. APT
    APT(Annotation Processing Tool),是一个注解处理器,是javac的一个工具,在编译时扫描和处理注解,可以在代码编译期解释注解,并且生成新的Java文件,减少手动输入代码。
  2. aspectJ
    是一个面向切面的框架,aspectJ定义了AOP语法,它用专门的编译器生成java字节码文件。它可以在某一个方法的前后插入部分代码,也就是在生成class时动态织入代码。
  3. Javassit
    是一个开源的分析,编辑和创建Java字节码的类库。
    APT是在源码阶段修改java文件,aspectJ是在生成class时修改class,ASM与Javassit差不多,都是修改已经生成的class文件。

cglib

cglib是什么?
  1. cglib(code generator library),是一个高性能的代码生成库。
  2. cglib基于asm技术,可以对字节码(class)进行操作,因此被广泛应用于AOP,将方法动态织入class中。
  3. 它也是spring实现的一种动态代理技术,它也被用在Hibernate框架中。
cglib动态代理与jdk动态代理
  1. cglib动态代理是使用asm技术实现,将代理对象类的class字节码文件加载进来,通过修改其字节码生成子类。cglib只能针对类实现代理。
  2. jdk动态代理是使用反射技术实现,利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。jdk动态代理只能对实现相同接口的类生成代理。

core

  1. core是spring-core模块的核心实现代码,其他的包(asm,objenesis,cglib)都是spring-core引入的依赖库。

lang

  1. lang包中提供spring中定义注解元素不为空的注解类。

objenesis

objenesis是什么?
  1. objenesis,是一个用来实例化一些特殊类的新对象的java库。
  2. java支持使用Class.newInstance()进行动态实例化,但是它只是适用于适当的构造器。当类中包含需要参数的构造器,有副作用的构造器以及抛出异常的构造器时,java提供的动态实例化就不再适用。
  3. 在库中常见的限制是类必须要默认构造函数,objenesis旨在绕过对象实例化的构造函数来克服这些限制。
objenesis使用场景

objenesis一般使用在不需要调用构造函数就能实例化对象的场景。

  1. 序列化(Serialization),远程调用(Remoting)和持久化(Persistence)。要求对象需要被实例化并还原到特定状态,而不需要调用代码。
  2. 代理(Proxies),面向切面编程(AOP)和模拟对象(Mock Objects)。类可以被子类化,而不需要担心super()构造器。
  3. 容器框架(Container Frameworks)。在非标准的情况下类被动态实例化。

util

  1. 工具类,提供一些必要的工具。

spring-core模块功能

BeanFactory是spring最核心的组件,而spring-core则为BeanFactory的定义提供基础服务。spring-core中最核心的部分则是core中的代码。其他部分的代码都是为core中的代码服务。

文献引用

  1. ASM
  2. 从零开始造Spring04—补充之ASM的原理以及在Spring中的应用
  3. AOP:APT,AspectJ,Javassist/Asm
  4. CGLIB原理及实现机制
  5. Spring的两种动态代理:Jdk和Cglib 的区别和实现
文章作者: rack-leen
文章链接: http://yoursite.com/2020/01/13/%E6%BA%90%E7%A0%81%E9%98%85%E8%AF%BB/Java/Spring%E6%BA%90%E7%A0%81%E9%98%85%E8%AF%BB/spring-core/spring-core%E6%A8%A1%E5%9D%97%E6%BA%90%E7%A0%81%E9%98%85%E8%AF%BB%E5%87%86%E5%A4%87/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 rack-leen's blog
打赏
  • 微信
  • 支付宝

评论