Java——动态代理(2/2)-动态代理的应用场景和好处(原始模块、使用代理、测试执行)

目录

使用代理优化用户管理类

原始模块

使用代理 

测试执行 


解决实际问题、掌握使用代理的好处

使用代理优化用户管理类

场景

  • 某系统有一个用户管理类,包含用户登录,删除用户,查询用户等功能,系统要求统计每个功能的执行耗时情况,以便后期观察程序性能。

需求

  • 现在,某个初级程序员已经开发好了该模块,请观察该模块的代码,找出目前存在的问题,并对其进行改造。

原始模块

用户业务接口

//用户业务接口
public interface UserService {
    //登录功能
    void login(String loginName,String passWord) throws Exception;
    //删除用户
    void deleteUsers() throws Exception;
    //查询用户,返回数组的形式
    String[] selectUsers() throws Exception;
}

用户业务实现类

//用户业务实现类(面向接口编程)
public class UserServiceImpl implements UserService{
    @Override
    public void login(String loginName, String passWord) throws Exception {
        long startTime = System.currentTimeMillis();

        if("admin".equals(loginName) && "123456".equals(passWord)){
            System.out.println("您登录成功,欢迎光临本系统~");
        }else {
            System.out.println("您登录失败,用户名或密码错误!");
        }
        Thread.sleep(1000);

        long endTime = System.currentTimeMillis();
        System.out.println("login方法执行耗时:" + (endTime - startTime) / 1000.0 + "s");
    }

    @Override
    public void deleteUsers() throws Exception {
        long startTime = System.currentTimeMillis();

        System.out.println("成功删除了1万个用户~");
        Thread.sleep(1500);

        long endTime = System.currentTimeMillis();
        System.out.println("deleteUsers方法执行耗时:" + (endTime - startTime) / 1000.0 + "s");
    }

    @Override
    public String[] selectUsers() throws Exception {
        long startTime = System.currentTimeMillis();

        System.out.println("查询出了3个用户");
        String[] names = {"张全蛋","李二狗","牛爱花"};
        Thread.sleep(500);

        long endTime = System.currentTimeMillis();
        System.out.println("selectUsers方法执行耗时:" + (endTime - startTime) / 1000.0 + "s");
        return names;
    }
}

使用代理 

代理类

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class ProxyUtil {
    public static UserService createProxy(UserService userService){
        UserService userServiceProxy = (UserService) Proxy.newProxyInstance(ProxyUtil.class.getClassLoader(),
                new Class[]{UserService.class}, new InvocationHandler() {
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        if(method.getName().equals("login") || method.getName().equals("deleteUsers") ||
                        method.getName().equals("selectUsers")){
                            long startTime = System.currentTimeMillis();

                            Object rs = method.invoke(userService,args);

                            long endTime = System.currentTimeMillis();
                            System.out.println(method.getName() + "方法执行耗时:" + (endTime - startTime) / 1000.0 + "s");
                            return rs;
                        }else {
                            Object rs = method.invoke(userService,args);
                            return rs;
                        }
                    }
                });
        return userServiceProxy;
    }
}

修改用户业务实现类

//用户业务实现类(面向接口编程)
public class UserServiceImpl implements UserService{
    @Override
    public void login(String loginName, String passWord) throws Exception {
        if("admin".equals(loginName) && "123456".equals(passWord)){
            System.out.println("您登录成功,欢迎光临本系统~");
        }else {
            System.out.println("您登录失败,用户名或密码错误!");
        }
        Thread.sleep(1000);
    }

    @Override
    public void deleteUsers() throws Exception {
        System.out.println("成功删除了1万个用户~");
        Thread.sleep(1500);
    }

    @Override
    public String[] selectUsers() throws Exception {
        System.out.println("查询出了3个用户");
        String[] names = {"张全蛋","李二狗","牛爱花"};
        Thread.sleep(500);
        
        return names;
    }
}

测试执行 

import java.lang.reflect.Array;
import java.util.Arrays;

public class Test {
    public static void main(String[] args) throws Exception{
        //1.创建用户业务对象
        UserService userService = ProxyUtil.createProxy(new UserServiceImpl());

        //2.调用用户业务的功能。
        userService.login("admin","123456");
        System.out.println("---------------------------------");

        userService.deleteUsers();
        System.out.println("---------------------------------");

        String[] names = userService.selectUsers();
        System.out.println("查询到的用户是:" + Arrays.toString(names));
        System.out.println("---------------------------------");
    }
}

运行结果:


END


学习自:黑马程序员——Java课程

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值