---主类
package com.hans.myproxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.HashMap;
import java.util.Map;
import com.hans.myproxy.Advice;
public class MyProxy {
public static void main(String[] args) {
Map m = new HashMap();
Map map = (Map) getProxy(m, new MyAdvice());
map.put("1", 2);
System.out.println(map);
}
public static Object getProxy(final Object target, final Advice advice){
return Proxy.newProxyInstance(
target.getClass().getClassLoader(), 目标的加载类
target.getClass().getInterfaces(), 目标实现的接口
new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
advice.content1(method);
Object retObje = method.invoke(target, args);
advice.content2(method);
return retObje;
}
});
}
}
package com.hans.myproxy;
import java.lang.reflect.Method;
public interface Advice {
void content1(Method method);
void content2(Method method);
}
package com.hans.myproxy;
import java.lang.reflect.Method;
public class MyAdvice implements Advice{
private long endTime = 0;
@Override
public void content1(Method method) {
System.out.println("我是开始的");
long beginTime = System.currentTimeMillis();
System.out.println(method.getName()+" 用了"+(beginTime-endTime)+"时间");
}
@Override
public void content2(Method method) {
System.out.println("我是结束的");
endTime = System.currentTimeMillis();
}
}
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------