JDK 6動(dòng)態(tài)編譯—內(nèi)存字符串編譯方式
作者:qiang106
JDK6開始提供了動(dòng)態(tài)編譯的API,在許多應(yīng)用場景都可以用得著,如動(dòng)態(tài)加載(修改)服務(wù)、高性動(dòng)態(tài)業(yè)務(wù)邏輯實(shí)現(xiàn)(用腳本或模板引擎實(shí)現(xiàn)效率滿足不了需求)等都非常好用。
JDK6開始提供了動(dòng)態(tài)編譯的API,在許多應(yīng)用場景都可以用得著,如動(dòng)態(tài)加載(修改)服務(wù)、高性動(dòng)態(tài)業(yè)務(wù)邏輯實(shí)現(xiàn)(用腳本或模板引擎實(shí)現(xiàn)效率滿足不了需求)等都非常好用。
API對應(yīng)的接口都在javax.tools包下面,常用編譯方式有基于文本文件、內(nèi)存字符串等,實(shí)際上基于URI的字節(jié)流都可以,也就是遠(yuǎn)程Java源代碼也可以。對于常用的已有文件形式的動(dòng)態(tài)編譯網(wǎng)上的實(shí)例已經(jīng)非常多,我在這里介紹下動(dòng)態(tài)編譯內(nèi)存中以字符串的形式。
簡單的代碼流程如下:
完整的測試類:
Class TestDyCompile
我在這里的具體業(yè)務(wù)類為dyclass.Foo,也就是我們需要?jiǎng)討B(tài)編譯的類,為了方便寫業(yè)務(wù)的調(diào)用代碼,也可以讓我們的業(yè)務(wù)類實(shí)現(xiàn)一個(gè)接口,然后通過反射獲得具體子類強(qiáng)制轉(zhuǎn)換來調(diào)用。
Test接口:
另外,在代碼中還有這么一段:
責(zé)任編輯:金賀
來源:
ITEYE博客


相關(guān)推薦




