zoukankan      html  css  js  c++  java
  • 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表达式
    • 对于继承关系,有些不支持,例如:

     

     

     

     

     

  • 相关阅读:
    nginx 附件上传不上去 client_max_body_size 设置的太小
    python 1
    NGINX 常用配置
    Linux OOM Killer 保护机制
    MacbookPro接上HDM连接显示器不能上网的解决方法
    python 逻辑运算符 () > not > and > or
    TASSL 服务端 客户端测试代码
    SSL通信双方如何判断对方采用了国密
    C/S boringSSL那点事
    从Chrome源码看浏览器的事件机制
  • 原文地址:https://www.cnblogs.com/attilax/p/15197426.html
Copyright © 2011-2022 走看看