ThreadLocal是将非线程安全类改造为线程安全类的法宝。PerformanceMonitor提供了两个方法:通过调用begin(String method)方法开始对某个目标类方法的监视,method为目标类方法的全限定名;而end()方法结束对目标类方法的监视,并给出性能监视的信息。这两个方法必须配套使用。
用于记录性能监视信息的MethodPerformance类的代码如所示:
package com.smart.proxy;
public class MethodPerformace {
private long begin;
private long end;
private String serviceMethod;
public MethodPerformace(String serviceMethod){
reset(serviceMethod);
}
public void printPerformace(){
end = System.currentTimeMillis(); // 记录结束时间
long elapse = end - begin; // 计算消耗时间
System.out.println(serviceMethod+"花费"+elapse+"毫秒。");
}
public void reset(String serviceMethod){
this.serviceMethod = serviceMethod;
this.begin = System.currentTimeMillis(); // 记录开始时间
}
}
通过下面的代码测试拥有性能监视能力的ForumServiceImpl业务方法:
package com.smart.proxy;
import java.lang.reflect.Proxy;
import static org.testng.Assert.*;
import org.testng.annotations.*;
public class ForumServiceTest {
@Test
public void proxy() {
// 业务类正常编码的测试
ForumService forumService = new ForumServiceImpl();
forumService.removeForum(10);
forumService.removeTopic(1012);
// 使用JDK动态代理
// ForumService target = new ForumServiceImpl();
// PerformaceHandler handler = new PerformaceHandler(target);
// ForumService proxy = (ForumService) Proxy.newProxyInstance(target
// .getClass().getClassLoader(),
// target.getClass().getInterfaces(), handler);
// proxy.removeForum(10);
// proxy.removeTopic(1012);
//使用CGLib动态代理
// CglibProxy cglibProxy = new CglibProxy();
// ForumService forumService = (ForumService)cglibProxy.getProxy(ForumServiceImpl.class);
// forumService.removeForum(10);
// forumService.removeTopic(1023);
}
}
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-64976-2.html
两个字
别以为这是US的强大