动态代理

    技术2025-10-22  24

    动态代理 *特点:字节码随用随创建,随用随加载作用:不修改源码基础上,对方法进行增强分类:基于接口的动态代理和基于子类的动态代理基于接口的动态代理:涉及的类:proxy提供者:JDK官方提供了newProxyInstance()方法创建代理对象 ,我们只需传必要的参数即可怎么创建动态代理对象要求:被代理的类至少实现一个接口,如果没有则不能使用newProxyInstance()方法的参数ClassLoader:用于加载代理类的字节码的(也就是接口的字节码),和被代理对象相同的类加载器class<?>[]:用于让代理对象和被代理对象有相同的方法,固定写法字节码数组,代理类的类对象字节码数组(也就是接口的class对象.类加载器,加载字节码文件到jvm内存,会在堆中创建一个该类的字节码对应的一个class对象,并指向方法区的字节码类元信息)个人理解上面两个参数结合起来就是,使用被代理对象的类加载器来加载代理对象的字节码文件(接口字节码文件),并创建一个接口的class对象。InvocationHandler:用于提供增强代码的接口,让开发者自己实现代码增强它是让我们写如何代理,我们写一个该接口的实现类,一般是情况都是匿名内部类此接口是谁用谁写实现的方法是invoke(Object proxy, Method method, Object[] args) 作用:执行被代理对象的任何接口方法都会经过该方法(相当于拦截,关卡) 以下参数都是由代理对象生成,并传入的,由代理对象调用被代理对象执行对应的方法和传入参数 proxy:代理对象的引用 method:当前执行的方法 args:当前执行方法所需的参数 retrun:和被代理对象有相同的返回值

    基于接口的动态代理:

    Processed: 0.010, SQL: 9