1. 程式人生 > >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.

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表示式
  • 對於繼承關係,有些不支援,例如: