2010-08-12 72 views

回答

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開始。

1

解決問題的第二部分。我使用它,因爲我很懶惰,不想讓我的一半(工作)生活寫作getter和setter。相反,我在我的類定義之前放了一個註解@Data,並且所有事情都完成了。

請參閱Project Lombok上的3分鐘視頻演示。