首页 > 编程知识 正文

JAVA 动态代理,jdk动态代理是如何实现的

时间:2023-05-06 01:58:16 阅读:31798 作者:2416

在不使用JDK动态代理的情况下,要使用JDK动态代理,必须在java.lang.reflect包的Proxy类中找到JDK动态代理。 Proxy提供了一个创建动态代理类和实例的静态方法,它是由这些方法创建的所有动态代理类的超类。

要使用JDK代理,必须调用Proxy类的newProxyInstance方法。 调用此方法可以实现类的代理,从而实现类的增强

第一个参数:使用哪个类加载器加载代理对象第二个参数:扩展实现方法的类。 这个类实现的接口支持多个接口。 第三个参数:实现此接口InvocationHandler。 创建代理对象。 编写部分扩展代码实现接口。 方法publicinterfaceuserdao { public int add }公共字符串更新(stringid; }创建接口实现类,然后在接口中创建方法publicclassuserdaoimplimplementsuserdao { @ overridepublicintadd (inta,int b )//输出add方法} @ overridepublicstringupdate (stringid ) /在其中输出此方法以运行system.out.println (' update方法已执行.'); 返回id; 使用Proxy类创建接口代理对象publicclassjdkproxy { publicstaticvoidmain { string [ ] args } { class [ ]接口={ userrfaces } userdaoimpluserdao=newuserdaoimpl (; UserdaoDao=(Userdao ) proxy.newproxyinstance ) JDKproxy.class.getclassloader )、接口、newuserdaoproxy ) ) uu System.out.println ('扩展输出: ' add ); }//代理对象代码classuserdaoproxyimplementsinvocationhandler {//1.将创建的代理对象传递给//带参数的构造函数,然后返回私有对象对象publicuserdaoproxy(objectobj ) { this.obj=obj; } @ overridepublicobjectinvoke (对象代理,方法方法, Object[] args ) throwsthrowable(/方法之前以System.out.println //增强的方式运行objectres=method.invoke(obj,args ) 返回RES; }代码方法解释Proxy.newProxyInstance。 此方法用于返回扩展的类。 但是,此方法返回的对象是Object类,必须将返回的对象强烈转换为所需的类。 例如,上述方法强烈转换为UserDao类。 方法的第二个参数是代理对象实现的所有接口,接口是一个特殊类,使用Class[]装载多个接口。 第三个参数是class [ ] interfaces={ userdao.class }; proxy.newproxyinstance (JDK proxy.class.getclass loader (、接口、new InvocationHandler ) ) @ overridepublicobjic inder 此接口只有一个invoke方法,并且每当代理类中的每个方法运行时都会调用一次invoke。 实现这个界面的对象是代理对象,写强化的部分。 invoke方法的三个参数是参数Object proxy:代理对象、Method method:代理对象当前正在执行的方法的描述对象(反射)、object

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