challenge メソッドのフック

例えば、あるクラスのあるメソッドを実行する前に他の処理を呼びたい(例えばログやトランザクション開始など)。 また、そのメソッドの終了後にも何らかの後処理を呼びたい(トランザクション終了など)。

そのような、メソッドに対するフック処理を書いてください。 ライブラリを使用してメソッドのフックを実現した場合は ライブラリの名前を紹介してくれると助かります。

Posted feedbacks - Groovy

ProxyMetaClass を利用しました。
ただし、指定したクラスの
・コンストラクタ
・メソッド
の呼び出しの両方にインターセプタが実行されるので、
対象メソッドをどれにするか列挙する必要がありますね。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class MyClass{
    def MyClass(s){
        println "CONSTRUCTING"
    }
    def sayHello(name){
        println "Hello " + name
    }
}

class MyClassInterceptor implements Interceptor{
    Object beforeInvoke(Object object, String methodName, Object[] arguments){
        if( methodName == 'sayHello' ){
            println "  BEFORE"
        }
    }

    boolean doInvoke(){ true }

    Object afterInvoke(Object object, String methodName, Object[] arguments,
                     Object result){
        if( methodName == 'sayHello' ){
            println "  AFTER"
        }
        result
    }
}

def proxy= ProxyMetaClass.getInstance( MyClass )
proxy.interceptor= new MyClassInterceptor()

proxy.use{
    def invoice= new MyClass('trade')
    invoice.sayHello('GENZOU  ')
}

Index

Feed

Other

Link

Pathtraq

loading...