Java - 创建一个调用处理程序?

时间:2011-12-05 02:51:35

标签: java method-invocation invocationhandler

我正在尝试实现一个生成对象并拦截所有公共方法的工厂类。

我想在这里调用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
       }
}

2 个答案:

答案 0 :(得分:3)

我相信你可以用AspectJ来实现这一目标。

答案 1 :(得分:2)

Proxy类仅支持代理接口,而不支持类。

CGLib确实能够从类创建代理并执行您需要的操作。 Beans example可能是一个很好的起点。