Java代理

定义一个接口

package example2;

public interface UserService {
    void login(String loginName, String passWord) throws Exception;

    void deleteUsers() throws Exception;

    String[] selectUsers() throws Exception;
}

接口的实现类

package example2;

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("删除了1w个用户");
        Thread.sleep(2000);

        //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 = new String[]{"张三", "李四", "王五"};
        Thread.sleep(500);

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

生成代理

package example2;

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 res = method.invoke(userService, args);

                            long endTIme = System.currentTimeMillis();
                            System.out.println(method.getName() + "方法执行了" + (endTIme - startTime) / 1000.0 + "s");

                            return res;
                        }else {
                            Object res = method.invoke(userService, args);
                            return res;
                        }

                    }
                }
        );
        return userServiceProxy;
    }
}

测试

package example2;

import java.util.Arrays;

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

        UserService userService = ProxyUtil.createProxy(new UserServiceImpl());
        //调用业务的功能
        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("----------------------------------------");

    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迪迦敲代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值