ASM-16-组件组成
组件组成
到目前为止,我们只看到了如何创建和转换ClassNode对象,但是还没有看到如何从类的字节数组表示形式构造ClassNode,反之亦然,如何从ClassNode构造此字节数组。
实际上,这是通过组合核心API和树API组件来完成的,如本节所述。
介绍
除了图6.1中所示的字段之外,ClassNode类还扩展了ClassVisitor类,并且还提供了一个接受方法,该方法将Cl...
2018-07-20 05:43:31 |
Java
ASM-15-Tree Classes Interface and Components
本章简介
本章介绍如何使用ASM树API生成和转换类。
它从仅介绍tree API入手,然后进行说明如何与核心API组合在一起。
在下一章中将说明用于方法,注解和泛型内容的树形API。
Interfaces and components
Presentation(介绍)
类节点信息
用于生成和转换已编译Java类的ASM树API基于ClassNode类(请参见图6.1)。
...
2018-07-20 05:43:31 |
Java
ASM-14-reflectASM 性能更高的反射框架
reflectasm
reflectasm is a very small Java library that provides high performance reflection by using code generation.
An access class is generated to set/get fields, call methods, or create a ne...
2018-07-20 05:43:31 |
Java
ASM-13-向后兼容守则
守则
本节介绍了使用核心ASM API时必须遵循的准则,以确保您的代码在将来的任何ASM版本中均保持有效(按照上述合同的意义)。
首先,如果您编写类生成器,则没有任何可遵循的准则。
例如,如果您为ASM 4.0编写了一个类生成器,则它可能会包含一个诸如 visitSource(mySource, myDebug) 之类的调用,当然也不会包含对visitLicense的调用。
如果使用...
2018-07-20 05:43:31 |
Java
ASM-12-向后兼容
向后兼容
介绍
过去已经以类文件格式引入了新元素,并且将来将继续添加新元素(例如,用于模块化,Java类型的注释等)。
直到ASM 3.x,每个此类更改都导致ASM API中向后不兼容的更改,这是不好的。
为了解决这些问题,ASM 4.0中引入了一种新的机制。
其目标是确保即使将来在类文件格式中引入了新功能时,所有将来的ASM版本都将保持与任何先前版本(直至ASM 4.0)的向后兼...
2018-07-20 05:43:31 |
Java
ASM-11-Metadata Debug 调试
Debug
使用 javac -g 编译的类包含其源文件的名称,源行号和字节码指令之间的映射以及源代码中的本地变量名称和字节码中的本地变量槽之间的映射。
此可选信息在调试器中以及可用时在异常堆栈跟踪中使用。
结构体
类的源文件名存储在专用的类文件结构部分中(请参见图2.1)。
源行号和字节码指令之间的映射存储为方法的已编译代码部分中(行号,标签)对的列表。
例如,如果l1,l2和...
2018-07-20 05:43:31 |
Java
ASM-10-Metadata Annotation 注解
注解
如果类,字段,方法和方法参数注解(例如@Deprecated或@Override)存储在已编译的类中,则它们的保留策略不是RetentionPolicy.SOURCE。
该信息在运行时不会由字节码指令使用,但是如果保留策略为RetentionPolicy.RUNTIME,则可以通过反射API进行访问。
编译器也可以使用它。
结构
结构体
源代码中的注解可以采用多种形式,例如...
2018-07-20 05:43:31 |
Java
ASM-09-Metadata Generic 泛型
注解
本章说明如何使用核心API生成和转换已编译的Java类元数据,例如注解。
每个部分均以一种类型的元数据开始呈现,然后以一些说明性示例呈现相应的ASM接口,组件和工具以生成和转换这些元数据。
泛型
诸如 List<E> 之类的通用类以及使用它们的类包含有关它们声明或使用的通用类型的信息。
字节码指令在运行时不使用此信息,但是可以通过反射API进行访问。
编译器还使...
2018-07-20 05:43:31 |
Java