//一个通告或建议的接口
public interface Advice {
void afterMethod(Method method);
void beforeMethod(Method method);
}
public class MyAdvice implements Advice{
private long start;
@Override
public void afterMethod(Method method) {
System.out.println("运行时间计算结束!!");
System.out.println("共耗时:"+(System.currentTimeMillis()-start));
System.out.println("------------------------");
}
@Override
public void beforeMethod(Method method) {
System.out.println("开始计算运行时间:");
start=System.currentTimeMillis();
System.out.println("所执行的方法:"+method.getName());
}
}
//编写可生成代理和插入通告的通用方法
public class Test1 {
public static void main(String[] args) {
final List target=new ArrayList();
Collection coll = (Collection) getProxy(target,new MyAdvice());
coll.add("111");
coll.add("222");
coll.add("333");
System.out.println(coll.size());
}
//抽象出一个公共的方法
private static Object getProxy(final Object target,final Advice advice) {
Object coll=(Object) Proxy.newProxyInstance(
target.getClass().getClassLoader(),
target.getClass().getInterfaces(),
new InvocationHandler(){
@Override
public Object invoke(Object proxy, Method method,
Object[] args) throws Throwable {
advice.beforeMethod(method);
Object obj=method.invoke(target, args);
advice.afterMethod(method);
return obj;
}
});
return coll;
}
}
动态代理的实现2-编写可生成代理和插入通告的通用方法 .
最新推荐文章于 2024-10-04 16:33:04 发布