2011-07-06 4 views
1

開発者に各サービスメソッド呼び出しおよび/または例外を記録するのを忘れないようにする代わりに、適切なサービスメソッドをプロキシするパターン、呼び出しをログに記録するプロセス、スローされた例外をトラップ/ロギングするパターン発信者に応答を返す前に?私はプロキシのパターンがあることを知っていますが、私はそれが必要なことをしていません...ロギング要件をより強くするインタフェースを作成する方法があれば、それも可能です。ロガーへの明示的な呼び出しなしで適切にログを記録できるように、すべてのサービス呼び出しをプロキシする場合はどうすればよいですか?

+0

どのようにプロキシパターンがここに収まらないのですか?または、これを実現するために何かを実装する方法を混乱させていますか? –

答えて

2

ログを横断的関心事であるだろう。あなたはそれのためにAOPを使うことができます。 AspectJまたはSpring AOPをご覧ください。

+0

いくつかの研究の後、これが私の行く方向です。ありがとう! –

0

サービス層の実装に動的プロキシを使用することを検討できます。

リフレクションAPIを使用するので、サービスコードへのすべてのメソッド呼び出しは、サービス呼び出し、メソッドパラメータ、および例外メッセージを記録できる単一の「呼び出し」メソッドを経由します。あなたがあなたのサービスを呼び出す

public class MyServiceProxy implements InvocationHandler { 
      public static Object newInstance(Object obj) { 
        return java.lang.reflect.Proxy.newProxyInstance(
     obj.getClass().getClassLoader(), 
     obj.getClass().getInterfaces(), 
     new MyServiceProxy(obj)); 
     } 

      public Object invoke(Object proxy, Method m, Object[] args) { 
        // Log method name , parameters etc. 
        try { 
         method.invoke(proxy, args) ; 
        } 
        catch(InvocationTargetException e) { 
         // log your exceptions and do other things 
         throw e.getTargetException(); 
        } 
      } 

、あなたの代わりにこの

  MyService myServiceRef = (MyService)MyServiceProxy.newInstance(new MyService()); 
関連する問題