[英]Executing a method, when any other method in that class is called other then Aspect
我正在尋找一個方法被執行的Java實現,當該類中的任何其他方法都稱為Aspect之后(類似於@before為Junits做的事情)
我更喜歡不使用JAspect。 (只是因為我不想有一個Spring配置文件,如果沒有Spring XML配置,可能的話)
簡單的例子
public class Reader {
private void init(){}
private void method1(){}
private void method2(){}
}
在這里,每次調用method1或method2時,都必須調用init()。
提前致謝
您可以嘗試使用Javassist調整實現。 您可以在這里找到很好的介紹。 以下代碼段摘自該教程(略有改編),並顯示了如何操作字節碼以插入其他命令:
public class Hello {
public void say() {
System.out.println("Hello");
}
public void ask() {
System.out.println("HM?");
}
}
public class Test {
public static void main(String[] args) throws Exception {
ClassPool cp = ClassPool.getDefault();
CtClass cc = cp.get("Hello");
CtMethod m = cc.getDeclaredMethod("say");
m.insertBefore("{ ask(); }");
Class c = cc.toClass();
Hello h = (Hello)c.newInstance();
h.say();
}
}
您應該看一下代理模式。
JAVA已經提供了這種機制。 它稱為動態代理。
檢查一下: http : //tutorials.jenkov.com/java-reflection/dynamic-proxies.html
或搜索“ JAVA動態代理”。 您會發現大量的資源。
一些理論:您可以根據需要執行三種操作:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.