让jvm产生动态类及其实例对象,需要提供的信息:
1,告诉jvm生成的类中有哪些方法,通过让其实现哪些接口来说明。
2,产生的类字节码必须有一个关联的类加载器对象。
3,一个InvocationHandler对象,他是在创建动态类实例对象的构造方法时传递进去的。
private static Object getProxy(final Object target,final Advice advice) {
Object proxy3 = Proxy.newProxyInstance(
target.getClass().getClassLoader(),
/*new Class[]{Collection.class},*/
target.getClass().getInterfaces(),
new InvocationHandler(){
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
/*long beginTime = System.currentTimeMillis();
Object retVal = method.invoke(target, args);
long endTime = System.currentTimeMillis();
System.out.println(method.getName() + " running time of " + (endTime - beginTime));
return retVal;*/
advice.beforeMethod(method);
Object retVal = method.invoke(target, args);
advice.afterMethod(method);
return retVal;
}
}
);
return proxy3;
}