究竟是什麼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. 什麼是Java字節碼中的#號?
- 3. Android上的Java字節碼注入
- 4. 什麼是ILLegal字節碼?
- 5. As3 swf字節碼注入
- 6. 字節碼注入後java.lang.VerifyError
- 7. 字節碼究竟是什麼?
- 8. 什麼是java字節碼性能getfield vs invokevirtual
- 9. 爲什麼'a'是對象引用的Java字節碼前綴?
- 10. 什麼是Java ASM節點?
- 11. 字節碼注入可能有用嗎?
- 12. 什麼是SQL注入?
- 13. 什麼是注入JPA
- 14. 什麼是SQL注入
- 15. 什麼是依賴注入?
- 16. 爲了有害的目的在XML中注入Java字節碼
- 17. Java字節碼
- 18. Java註釋的默認值是否編譯爲字節碼?
- 19. 這些字節是什麼?
- 20. 什麼是活字節?
- 21. 將源代碼轉換爲Java字節碼的實用程序是什麼
- 22. 輸入的字符代碼是什麼?
- 23. 是否可以將LLVM字節碼轉換爲Java字節碼?
- 24. 字節碼優於本地代碼的優點是什麼?
- 25. Java字符串中負字節值的意義是什麼?
- 26. 爲什麼java中的字符大小是2個字節?
- 27. Java字節碼DUP
- 28. Java字節碼庫
- 29. 如何在java中表示java註釋字節碼
- 30. php空字節注入?