2011-12-05 7 views
1

オブジェクトを生成し、すべてのパブリックメソッドを代行するファクトリクラスを実装しようとしています。Java - 呼び出しハンドラを作成しますか?

私はここで2つのメソッドを呼び出そうとしています。 1:すでに呼び出されたメソッド2:私のベースのメソッド。 どのように私はこれを達成することができますか?

public class LoggerFactory { 


    public LoggerFactory() { 
    } 

     // Clazz is always a class inheriting from Loggable 
    public Object newInstance(Class clazz) { 
     return Proxy.newProxyInstance(clazz.getClassLoader(), new Class[] {clazz}, handler); 
    } 

    private InvocationHandler handler = new InvocationHandler() { 

     @Override 
     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { 
      // Call logStartingTime on object 

      // Call invoked method on object 

      // Call logEndingTime on object 

      return null; 
     } 
    }; 
} 

私の抽象クラス:

public abstract class Loggable { 

     void logStartingTime() { 
      log.info(“start time = ” + new Date()); 
      // also log some info about the state of the object 
     } 

     void logEndingTime() { 
      log.info(“ending time = ” + new Date()); 
      // also log some info about the state of the object 
     } 
} 

答えて

3

AspectJでこれを達成できると思います。

+0

+1。具体的に言えば、 'Loggable'を基本クラスとして持つことはあまり意味がありません。あなたも含めたい他の構成可能な行動があったらどうなりますか? AOPはより良いアプローチのようです。 – Dan

2

Proxyクラスは唯一のプロキシインタフェースではなくクラスをサポートしています。

CGLibには、クラスからプロキシを作成して必要な処理を行う機能があります。 Beans exampleは良い出発点を提供するかもしれません。

関連する問題