JDK动态代理
来源:互联网 发布:c语言简单小程序 编辑:程序博客网 时间:2024/05/01 14:09
jdk的动态代理主要涉及的到java.lang.reflect包中的: Proxy 和 InvocationHandler 这两个类
PerformanceMonitor:
package com.baobaotao.service.proxy;
public class PerformanceMonitor {
private static ThreadLocal<MethodPerformance> performanceRecord = new ThreadLocal<MethodPerformance>();
public static void begin(String method) {
System.out.println("begin monitor...");
MethodPerformance mp = new MethodPerformance(method);
performanceRecord.set(mp);
}
public static void end() {
System.out.println("end monitor...");
MethodPerformance mp = performanceRecord.get();
mp.printPerformance();
}
}
MethodPerformance:
package com.baobaotao.service.proxy;
public class MethodPerformance {
private long begin;
private long end;
private String serviceMethod;
public MethodPerformance(String serviceMethod) {
this.serviceMethod = serviceMethod;
this.begin = System.currentTimeMillis();
}
public void printPerformance() {
end = System.currentTimeMillis();
long elapse = end - begin;
System.out.println(serviceMethod + "花费" + elapse + "毫秒");
}
}
PerformanceHandler
package com.baobaotao.service.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class PerformanceHandler implements InvocationHandler{
private Object target;
public PerformanceHandler(Object target) {
this.target = target;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
//PerformanceMonitor是自己定义的一个监听类
PerformanceMonitor.begin(target.getClass().getName() + "." + method.getName());
Object obj = method.invoke(target, args);
PerformanceMonitor.end();
return obj;
}
}
TestForumService:
package com.baobaotao.service.proxy;
import java.lang.reflect.Proxy;
import com.baobaotao.service.proxy.impl.ForumServiceImpl;
public class TestForumService {
public static void main(String[] args) {
//希望被代理的目标业务类
ForumService target = new ForumServiceImpl();
//将目标类与横切代码编织到一起
PerformanceHandler handler = new PerformanceHandler(target);
//根据编织了目标业务类逻辑和性能监视横切逻辑的InvotationHandler实例创建代理实例
ForumService proxy = (ForumService)Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), handler);
proxy.insert();
}
}
- 代理模式,JDK动态代理
- Java动态代理--jdk代理
- 代理模式-JDK动态代理
- JDK中的动态代理
- JDK动态代理
- JDK动态代理
- JDK动态代理
- jdk动态代理(暂)
- JDK动态代理
- JDK动态代理实例
- jdk 动态代理
- JDK动态代理
- JDK动态代理说明
- jdk动态代理
- JDKDynamicProxy JDK动态代理
- JDK动态代理实现
- JDK 动态代理
- JDK动态代理
- 目的
- 呵呵
- .NET系列 之 借鉴的两种方式和不同结果
- 《The Elements of Programming Style 》老人言
- 299 - Train Swapping - Uva online
- JDK动态代理
- 测试
- 新来的,大家帮下忙哦
- 第4讲 文本编辑器Vim/Vi 视频下载地址
- 数据结构图的综合实验代码
- 只需简单几步,使eclipse和java-docs-api中文文档无缝连接
- 心情不好
- jQuery弹出层插件大全
- java mail Test