Atitti 类库 开发者 常用 api 目录 1.1. Meta anno注解元数据api 1 1.2. Ref 反射api 1 1.3. Database meta api 1 1.4.

Atitti 类库   开发者 常用  api

 

目录

1.1. Meta anno注解元数据api 1

1.2. Ref 反射api 1

1.3. Database meta api 1

1.4. 切面asp库 1

1.5. Classloader api 1

1.6. 字节码库 1

 

 

    1. Meta anno注解元数据api
    2. Ref 反射api
    3. Database meta api
    4. 切面asp库
    5. Classloader api
    6. Ast api
    7. 字节码库javassist和Cglib  

如果你正在编写一个框架或者类库。有一些受欢迎的字节码库如javassist和Cglib Nodep asm可以供你选择,他们可以让你阅读和修改应用程序生成的字节码。

 

 目前字节码修改技术有ASM,javassist,cglib,BCEL等。cglib就是基于封装的Asm. Spring 就是使用cglib代理库。关于cglib的使用介绍,

它已加入了开放源代码JBoss 应用服务器项目,通过使用Javassist对字节码操作为JBoss实现动态AOP框架

 

 

 

 

java动态性的两种常见实现方式

  • 字节码操作
  • 反射

 

运行时操作字节码可以让我们实现如下功能:

  • 动态生成新的类
  • 动态改变某个类的结构(添加/删除/修改  新的属性/方法)

 

优势:

  • 比反射开销小,性能高
  • JAVAasist性能高于反射,低于ASM

 

 

CGLIB

是一个强大的,高性能,高质量的Code生成类库,基于ASM实现。

 

JAVAssist

  • 是一个开源的分析、编辑和创建java字节码的类库,性能较ASM差,跟cglib查不到,但是使用简单

 

JAVAssist库的API

  • javassist最外层的APIJava的反射包中的API颇为类似、
  • 它主要有CtClass,CtMethod,以及CtField及各类组成。用以执行和JDK反射APIjava.lang.Classjava.lang.reflect.Methodjava.lang.reflect.Method.Field相同的操作。

 

局限性:

  • JDK5.0行语法不支持(包括泛型、枚举),不支持注解修改,但可以通过底层的javassist类来解决,具体参考javassist.bytecode.annotation
  • 不支持数组的初始化,如String[]{1”,“2},除非只有数组的容量为1
  • 不支持内部类和匿名类
  • 不支持continuebtreak表达式
  • 对于继承关系,有些不支持,例如:

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/attilax/article/details/84799886
今日推荐