spring-core 模块
共有6个包
asm分析
AnnotationVisitor类:是一个抽象类,定义在解析注解时会触发的事件,如解析到一个基本值类型的注解、enum值类型的注解、Array值类型的注解、注解值类型的注解等。
AnnotationWriter类:继承了 AnnotationVisitor 类,用于拼接注解相关字节码。
Attribute类:字节码中属性的类抽象。
ByteVector类:字节码二进制存储的容器。
ClassReader类:字节码的读取与分析引擎。它采用类似SAX的事件读取机制,每当有事件发生时,调用注册的ClassVisitor、AnnotationVisitor、FieldVisitor、MethodVisitor做相应的处理。
ClassVisitor接口:定义在读取Class字节码时会触发的事件,如类头解析完成、注解解析、字段解析、方法解析等。
ClassWriter类:它实现了ClassVisitor接口,用于拼接字节码。
Context类:定义了一些字节码及其属性。
CurrentFrame类:继承自 Frame 类
从这些类也可以看出来asm包下的这些都是操作字节的,所有我们在写java代码时其实很少回去碰到的,在Spring2.5.6的时候需要asmJar 包, 3.0开始提供他自己独立的asmJar
标题第二个包cglib --代码生成库
很多时候在编译时期不能决定具体的对象类型,无法生成所需要的字节码。只能在运行时期,根据传入的实例,来生成字节码。这时就要用到动态代理
Cglib是一个强大的高性能的字节码生成工具包。底层通过字节码增强处理框架 ASM,来生成字节码并装载到JVM。脚本语言Groovy也是使用ASM来生成或修改Java的字节码。
动态代理常见的有jdk动态代理和cglib代理两种方式。jdk代理方式基于接口实现,cglib则并没有局限于接口,采用的是生成子类的方式,只要被代理类和方法不被final修饰即可
core --核心包
1)根目录:别名注册、属性访问、
2)annotation目录:注解、元注解、合并的注解等
3)codec目录:encode和decode输入流
4)convert目录:主要是转换器服务,将一个类型转换位另外一个类型。
5)env目录:就是配置文件Profiles
6)io目录:一些读取资源的类
7)log目录:几个日志类,利用的是Apache Log
8)serializer目录:序列化、反序列化类
9)style目录:代码风格
10)task目录:可执行任务类
11)type目录:Class元数据、注解元数据等