Java 动态代理作用与应用场景

1585364631
2023-02-20 / 0 评论 / 163 阅读 / 正在检测是否收录...

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

评论 (0)

取消