动态代理的实现2-编写可生成代理和插入通告的通用方法
2013-11-28 20:27
477 查看
[java] view
plaincopy
//一个通告或建议的接口
public interface Advice {
void afterMethod(Method method);
void beforeMethod(Method method);
}
[java] view
plaincopy
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());
}
}
[java] view
plaincopy
//编写可生成代理和插入通告的通用方法
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;
}
}
plaincopy
//一个通告或建议的接口
public interface Advice {
void afterMethod(Method method);
void beforeMethod(Method method);
}
[java] view
plaincopy
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());
}
}
[java] view
plaincopy
//编写可生成代理和插入通告的通用方法
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-编写可生成代理和插入通告的通用方法
- 动态代理的实现2-编写可生成代理和插入通告的通用方法 .
- 动态代理-编写可生成代理和插入通告的通用方法
- 动态代理-编写可生成代理和插入通告的通用方法
- 11.4 可执行代理和插入通告的通用方法
- Java动态代理的两种实现方法
- 两种动态代理的实现方法
- 利用Django中的url方法实现地址动态拼接自动生成超链接地址
- JAVA动态代理实现方法
- Java动态代理的两种实现方法
- Java动态代理的两种实现方法
- 动态生成js类的实现方法
- Java动态代理的两种实现方法
- 数据源的编写(开发中不写)、使用动态代理覆写Connection的close方法
- Java远程过程调用基础:构建可自适应的动态代理对象的通用方法
- 利用动态代理实现通用存储过程的调用
- Java动态代理的两种实现方法
- JS把内容动态插入到DIV的实现方法
- Java动态代理实现模拟RMI远程方法调用
- JqueryMobile动态生成listView并实现刷新的两种方法