java中的动态代理Proxy

  1. 创建一个 UserService 接口
public interface UserService {
    UserService login();
}
  1. 写一个 UserService 接口的具体实现类 UserServiceImpl
public class UserServiceImpl implements UserService {
    @Override
    public UserService login() {
        System.out.println("登录成功");
        return this;
    }
}
  1. 写一个代理类 UserProxy ,这里 实现了 InvocationHandler 接口
    创始一个使用jdk的proxy完成动态代理工具类
public class UserProxy implements InvocationHandler {
    private Object object;

    public UserProxy() {
    }

    public JdkProxy(Object object) {
        this.object = object;
    }
   //创建代理对象
    public Object createProxy() {
        // 使用Proxy完成代理对象创建
        // 1.得到目标对象的ClassLoader
        ClassLoader loader = target.getClass().getClassLoader();
        // 2.得到目标对象的实现接口的Class[]
        Class[] interfaces = target.getClass().getInterfaces();
        // 3.第三个参数需要一个实现了InvocationHandler接口的对象
        return Proxy.newProxyInstance(loader, interfaces, this);
    }

    // 在代理实例上处理方法调用并返回结果。
    // 参数1 就是代理对象,一般不使用
    // 参数2它调用的方法的Method对象
    // 参数3调用的方法的参数
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        // 功能增强操作
        System.out.println("登录前的其他操作....");
        method.invoke(object, args);
        //返回一个代理对象
        return proxy;
    }
}
  1. 编写一个测试类 TestUserProxy
public class TestProxy {
    @Test
    public void test1() {
        // 1.创建目标对象
        UserService userService = new UserServiceImpl();
        // 2.通过UserProxy完成代理对象创建
        UserProxy userProxy = new UserProxy(userService);
        UserService proxy = (UserService) userProxy.createProxy();
        proxy.login().login();
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、基本概念 1.什么是代理? 在阐述JDK动态代理之前,我们很有必要先来弄明白代理的概念。代理这个词本身并不是计...
    小李弹花阅读 16,514评论 2 40
  • 1、静态代理与动态代理区别 java class文件加载 一个正常的java工程,是在编辑器里编辑代码,通过编译生...
    安迪猪阅读 2,953评论 0 1
  • 0.前言 本文主要想阐述的问题如下:什么动态代理(AOP)以及如何用JDK的Proxy和InvocationHan...
    SYFHEHE阅读 6,852评论 1 7
  • 今日打卡2:共计39分钟 在论证中,我们要关注的是论证本身,而不是作出论证的人。 对人不对事。 民主谬误。 压制理...
    吟_f3da阅读 1,157评论 0 0
  • 用心做有情的事,只要真心付出,必会收获信任。
    优祺和平阅读 1,254评论 0 0