簡體   English   中英

執行一個方法時,當該類中的任何其他方法稱為“其他”而不是“外觀”時

[英]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()。

  1. 我對在該方法內調用init()不感興趣。
  2. 我對將Aspect與XML配置一起使用不感興趣。

提前致謝

您可以嘗試使用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動態代理”。 您會發現大量的資源。

一些理論:您可以根據需要執行三種操作:

  1. 外觀方向(您不想)
  2. 模板方法-模式(您不想)
  3. 代理模式(僅剩一種)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM