Java 动态代理案例实现

本文介绍了一个Java程序中如何使用Proxy和InvocationHandler创建UserService的代理,实现在方法调用前后记录耗时并输出。通过UserService接口,实现了对`userLogin`、`selectUsers`和`deleteUsers`方法的动态代理,增强了系统的灵活性和性能监控能力。
摘要由CSDN通过智能技术生成
package com.edu;

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

public class ProxyUtil {

    public static UserService getProxy(UserService userService) {
        return (UserService) Proxy.newProxyInstance(userService.getClass().getClassLoader(),
                userService.getClass().getInterfaces(), new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                long startTimer = System.currentTimeMillis();
                Object o = method.invoke(userService, args);
                long endTimer = System.currentTimeMillis();
                System.out.println(method.getName()+"耗时:"+(endTimer-startTimer)/1000.0+"秒");
                return o;
            }
        });
    }
}
package com.edu;

public class test1 {
    public static void main(String[] args) {
        UserService service =ProxyUtil.getProxy(new UserServiceImpl()) ;
        System.out.println(service.userLogin("admin", "123456"));
        service.selectUsers();
        System.out.println(service.deleteUsers());
    }
}
package com.edu;

public interface UserService {
    String userLogin(String username,String password);
    void selectUsers();
    boolean deleteUsers();
}
package com.edu;

public class UserServiceImpl implements UserService {

    @Override
    public String userLogin(String username, String password) {
        try {
            if ("admin".equals(username) && "123456".equals(password)) {
                Thread.sleep(3000);
                return "success";
            }
            return "用户名或密码错误";
        } catch (Exception e) {
            e.printStackTrace();
            return "error";
        }
    }

    @Override
    public void selectUsers() {
        System.out.println("查询100个用户数据成功");
        try {
            Thread.sleep(100);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    @Override
    public boolean deleteUsers() {
        System.out.println("删除100个用户数据成功");
        try {
            Thread.sleep(1000);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值