做網(wǎng)站最主要是什么最新的新聞 最新消息
字節(jié)碼技術(shù)應(yīng)用
字節(jié)碼技術(shù)的應(yīng)用場景包括但不限于AOP,動態(tài)生成代碼,接下來講一下字節(jié)碼技術(shù)相關(guān)的第三方類庫,第三方框架的講解是為了幫助大家了解字節(jié)碼技術(shù)的應(yīng)用方向,文檔并沒有對框架機制進行詳細分析,有興趣的可以去了解相關(guān)框架實現(xiàn)原理和架構(gòu),也可以后續(xù)為大家奉上相關(guān)詳細講解。
ASM
ASM 是一個 Java 字節(jié)碼操控框架,它能被用來動態(tài)生成類或者增強既有類的功能。ASM 可以直接產(chǎn)生二進制 class 文件,也可以在類被加載入 Java 虛擬機之前動態(tài)改變類行為。
說白了,ASM可以在不修改Java源碼文件的情況下,直接對Class文件進行修改,改變或增強原有類功能。
在熟悉了字節(jié)碼原理的情況下,理解動態(tài)修改字節(jié)碼技術(shù)會更加容易
接下來我們只針對ASM框架中幾個主要類進行分析,并舉個栗子幫助大家理解。
主要類介紹
ClassVisitor
提供各種對字節(jié)碼操作的方法,包括對屬性、方法、注解等內(nèi)容的修改:
ClassWriter
主要功能就是記錄所有字節(jié)碼相關(guān)字段,并提供轉(zhuǎn)換為字節(jié)數(shù)組的方法:
ClassReader?Opcodes
ASM除了可以動態(tài)生成新的Class文件,還可以修改原有Class文件的功能或者在原Class文件新增方法字段等,這里不再舉例子,有興趣的可以自己研究一下。不過大家已經(jīng)發(fā)現(xiàn),使用ASM動態(tài)修改Class文件,難度還是有的,需要使用者對JVM指令、Class格式相當熟悉,
除了ASM,還有其他第三方工具也提供了對字節(jié)碼的動態(tài)修改,包括CGLib,Javassisit,AspectJ等,而這些框架相比于ASM,則是將JVM指令級別的編碼封裝起來,讓使用者直接使用Java代碼編輯,使用更加方便。
引申
既然JVM運行時識別的只是.class文件,而文件格式我們也了解,那是不是只要我們能夠正確生成.class文件就可以直接運行,甚至可以不用Java語言?
答案大家肯定都知道了,當然可以。Kotlin,Scala,Groovy,Jython,JRuby…這些都是基于JVM的編程語言。
那如果我們想自己實現(xiàn)一款基于JVM的開發(fā)語言,怎么搞?
定義語義,靜態(tài),動態(tài)?,強類型,弱類型?…
定義語法,關(guān)鍵字(if,else,break,return…)
定義代碼編譯器,如何將自己的代碼編譯成.class
知識來源:
【基礎(chǔ)】什么是字節(jié)碼,作用是什么_嗶哩嗶哩_bilibili
字節(jié)碼詳解_封何的博客-CSDN博客