2016-10-02 24 views
4
class A extends B{ 
public void a(){ 
    super.a(); 
    System.out.println("hello"); 
} 
} 

我想用Javassist進行super.xxx後插入一些代碼,例如:如何使用Javassist進行插入代碼super.xxx後()

class A extends B{ 
public void a(){ 
    super.a(); 
    System.out.println("inject"); // javassist 
    System.out.println("hello"); 
} 
} 

如果起源代碼不包含超。 xxx,那麼只需使用method.insertBefore注入代碼即可。

我的問題是如何確定該方法是否包含「super.xxx」 以及如何插入代碼,就像上面描述的那樣。

回答

0

根據您的代碼,它看起來是您要插入代碼的方法的結尾,因此您可以使用ClassPoolinsertAfter()方法在特定方法的末尾添加行。

你也可以用戶insertAt()方法,但它總是在指定的行號之前插入。

0

Javassist允許您使用CtBehavior::insertAt方法在特定行號處添加代碼。但請注意,這需要您編譯代碼with the -g option以包含此類行號信息。另外請注意,這通常不是一個好方法,因爲更改代碼會導致程序中斷或在錯誤的時間觸發代碼。

你是否試圖在調用super方法後執行代碼?如果是的話,儘量插裝超類B包含使用CtBehavior::insertAfter下面的代碼:

if (this instanceof A) { 
    // your code goes here. 
} 

這將有同樣的效果,但穩健的行數的變化。

相關問題