Java 动态代理作用与应用场景
场景
- 某系统有一个用户管理类,包含用户登录,删除用户,查询用户等功能,系统要求统计每个功能的执行耗时情况,以便后期观察程序性能
定义接口
public interface UserService {
void login(String loginName,String passWord) throws Exception;
void deleteUsers() throws Exception;
String[] selectUsers() throws Exception;
}
定义接口重写实现类
public class UserServiceable implements UserService{
@Override
public void login(String loginName, String passWord) throws Exception {
if (loginName.equals("admin") && passWord.equals("123456")){
System.out.println("登入成功");
}else {
System.out.println("登入失败");
}
Thread.sleep(1000);
}
@Override
public void deleteUsers() throws Exception {
System.out.println("删除成功");
Thread.sleep(1500);
}
@Override
public String[] selectUsers() throws Exception {
System.out.println("查询用户成功");
Thread.sleep(500);
return new String[]{"张三", "李四", "王五"};
}
}
主函数执行方法
public static void main(String[] args) throws Exception {
UserService u = new UserServiceable();
UserService userService = (UserService) Proxy.newProxyInstance(UserServiceable.class.getClassLoader(), UserServiceable.class.getInterfaces(), new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("-----------------");
System.out.println(method.getName() + "方法开始执行");
long startTime = System.currentTimeMillis();
System.out.println("运行开始时间:" + String.valueOf(startTime));
Object invoke = method.invoke(u,args);
long endTime = System.currentTimeMillis();
System.out.println("运行结束时间:" + String.valueOf(endTime));
System.out.println("deleteUsers方法耗时" + (endTime - startTime) / 1000.0 + "秒");
System.out.println("-----------------");
return invoke;
}
});
userService.login("admin","123456");
userService.login("admin1","1234561");
userService.selectUsers();
userService.deleteUsers();
}
运行结果
login方法开始执行
运行开始时间:1676900709812
登入成功
运行结束时间:1676900710820
deleteUsers方法耗时1.008秒
-----------------
-----------------
login方法开始执行
运行开始时间:1676900710825
登入失败
运行结束时间:1676900711832
deleteUsers方法耗时1.007秒
-----------------
-----------------
selectUsers方法开始执行
运行开始时间:1676900711832
查询用户成功
运行结束时间:1676900712335
deleteUsers方法耗时0.503秒
-----------------
-----------------
deleteUsers方法开始执行
运行开始时间:1676900712335
删除成功
运行结束时间:1676900713846
deleteUsers方法耗时1.511秒
-----------------
评论 (0)