我正在尝试实现一个生成对象并拦截所有公共方法的工厂类。
我想在这里调用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
}
}
答案 0 :(得分:3)
我相信你可以用AspectJ来实现这一目标。
答案 1 :(得分:2)
Proxy类仅支持代理接口,而不支持类。
CGLib确实能够从类创建代理并执行您需要的操作。 Beans example可能是一个很好的起点。