首页 > 编程知识 正文

jdk动态代理是如何实现的,java动态代理底层原理

时间:2023-05-05 01:44:05 阅读:31795 作者:46

目录JDK动态代理代码的实现

JDK动态代理

JDK动态代理使用Proxy类里面的newProxyInstance方法创建代理对象。

修改型加载器描述符(类加载器加载器,类? [ ]接口,InvocationHandler h返回指定接口的代理类的实例,该代理类将方法调用分配给指定的调用处理程序。 方法有三个参数:

第一个参数:类加载器。

第二个参数:扩展方法所在的类。 该类实现的接口支持多个接口。

第三个参数:实现此接口InvocationHandler以创建代理的对象,然后在此类中编写扩展方法。

代码实现(1)创建接口并定义方法。

(2)建立接口实现类,实现方法。

)3)使用Proxy类创建接口代理对象。

UserDao接口:

package com.Keafmd.spring5;/* * * kea FMD * * @ class name : userdao * @ description : * @ author :牛骚的dsd zxc * @ date :2021-01-17203604440 } UserDaoImpl实现类:

package com.Keafmd.spring5;/* * * kea FMD * * @ class name : userdao impl * @ description :实现类* @author:牛骚dsdzxc* @ date :2021-01-1720360 publicclassuserdaoimplimplementsuserdao { @ overridepublicintadd (inta,int b ) ) system.out 返回a b; } @ overridepublicstringupdat (stringid ) system.out.println ('正在执行updat . ' ); 返回id; }} JDKProxy类:

package com.Keafmd.spring5; import Java.lang.reflect.invocation handler; import java.lang.reflect.Method; import java.lang.reflect.Proxy;/* * * kea FMD * * @ class name : JDK proxy * @ description : * @ author :440 (dsd zxc * @ date 33602021-01-17203360440 publicclassjdkproxy { publicstaticvoidmain (string [ ] args )//接口实现类代理对象CLL/* proxy.newproxyinstance (JDK proxy.class.getclass loader (、接口、new InvocationHandler ) @ overrridepublide mether (); */userdaoimpluserdao=newuserdaoimpl (; UserdaoDao=(Userdao ) proxy.newproxyinstance ) JDKproxy.class.getclassloader )、接口、newuserdaoproxy ) ) uu int result=Dao.add (1,2 ); system.out.println(result: ) result; system.out.println (------------不增强updat方法); stringRES=Dao.updat(keaFMD ); system.out.println(RES: ) RES; //代理对象代码classuserdaoproxyimplementsinvocationhandler//您创建的是谁的代理对象,传递了谁//参与结构传递私有对象obj; publicuserdaoproxy(objectobj ) { this.obj=obj; //增强的逻辑@ overridepublicobjectinvoke (对象代理,方法方法, object [ ] args (throws throwable (if (add '.equals ) method.getName ) ) /根据判断,在对不同方法执行扩展//方法之前以增强的方式运行objectres=method.invoke(obj,args )//方法运行后System.out.println ('方法运行后' obj ); 返回RES; }不增强else {//object RES=method.invoke (obj,args ); 返回RES; } }} 输出结果:

-------------强化添加方法----------- -在方法之前运行.正在运行添加.在方法之后运行com.kea FMD.spring5.

看完对你有帮助的话,谢谢你的夸奖!

如果你是电脑方面的话,你看到右下角的“一键三联”了吗? 我一定会点那个的[哈哈]

以上就是JDK动态代理的代码实现,在Spring5里面已经把动态代理的代码已经做了封装。

加油!

共同努力!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。