究竟是什麼Java字節碼注入,爲什麼會使用它?什麼是Java字節碼注入?
22
A
回答
25
Java代碼編譯成字節碼(Foo.java ->> Foo.class
)。字節碼注入在運行時修改Foo.class
,以便在其加載並運行之前將代碼注入到代碼中。
想象這樣一個場景,我想看看有多少次法
public void bar();
在Foo.class
被調用。我可以使用java.lang.instrument
編寫代理,該類代理在類加載期間截取Foo.class
,使用ASM修改該代理,以使bar()
在方法條目上調用com.amir.agent.incrementCount()
。
現在我可以運行我的程序:
$java -javagent:MyAgent Foo //assuming Foo has a main() defined
,並在運行時,Foo.class
不會做到的,只是正常的工作,它也將做的工作我在MyAgent
每次調用bar()
時間定義。
對於從頭開始編寫代理的指針,請從here開始。
3
首款谷歌搜索提供了一個有趣的閱讀Java Programming: Bytecode Injection
1
解決問題的第二部分。我使用它,因爲我很懶惰,不想讓我的一半(工作)生活寫作getter和setter。相反,我在我的類定義之前放了一個註解@Data,並且所有事情都完成了。
請參閱Project Lombok上的3分鐘視頻演示。
相關問題
- 1. Java字節碼注入
- 2. Android上的Java字節碼注入
- 3. 什麼是ILLegal字節碼?
- 4. As3 swf字節碼注入
- 5. 爲了有害的目的在XML中注入Java字節碼
- 6. 什麼是依賴注入?
- 7. 什麼是SQL注入?
- 8. 什麼是SQL注入
- 9. 將源代碼轉換爲Java字節碼的實用程序是什麼
- 10. 什麼是活字節?
- 11. 是否可以將LLVM字節碼轉換爲Java字節碼?
- 12. 字節碼優於本地代碼的優點是什麼?
- 13. Java字節碼庫
- 14. 爲什麼java中的字符大小是2個字節?
- 15. 爲什麼JSR/RET棄用Java字節碼?
- 16. 什麼期望Java字節代碼爲泛型類生成?
- 17. 什麼是多字節字符集?
- 18. 什麼是Java中的註冊?
- 19. 爲什麼MongoId不是12字節長,而是24字節?
- 20. 什麼是執行Java字節碼檢測的最有前途的方法?
- 21. 爲什麼Kotlin字節碼引用java.util.function.BiConsumer?
- 22. 什麼字節碼庫控制行號?
- 23. 爲什麼setuptools需要寫字節碼?
- 24. 什麼是C++的積累或Groovy注入的Java等價物?
- 25. 什麼是Java/Android中的視圖注入?
- 26. Java:什麼是使用反射注入字段的最快方法?
- 27. 什麼是你偷偷摸摸的PHP代碼注入攻擊?
- 28. 使用注入方法的Ruby代碼是做什麼的?
- 29. 什麼是字符編碼?
- 30. 注入SVG的目的是什麼?