Java白话反射-傻瓜都能看懂.ppt

上传人:s9****2 文档编号:570879226 上传时间:2024-08-07 格式:PPT 页数:26 大小:264.46KB
返回 下载 相关 举报
Java白话反射-傻瓜都能看懂.ppt_第1页
第1页 / 共26页
Java白话反射-傻瓜都能看懂.ppt_第2页
第2页 / 共26页
Java白话反射-傻瓜都能看懂.ppt_第3页
第3页 / 共26页
Java白话反射-傻瓜都能看懂.ppt_第4页
第4页 / 共26页
Java白话反射-傻瓜都能看懂.ppt_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《Java白话反射-傻瓜都能看懂.ppt》由会员分享,可在线阅读,更多相关《Java白话反射-傻瓜都能看懂.ppt(26页珍藏版)》请在金锄头文库上搜索。

1、Java反射技术反射技术详解详解宋秉华宋秉华qq: 21415169e-mail: 题题 外外 话话熟能生巧熟能生巧万物殊途同归万物殊途同归复杂的问题简单化复杂的问题简单化简单的问题复杂化简单的问题复杂化以铜为镜,可以正衣冠;以铜为镜,可以正衣冠;以古为镜,可以知兴替;以古为镜,可以知兴替; 以人为镜,以人为镜, 可以明得失。可以明得失。 以反射为镜,可以知属性。以反射为镜,可以知属性。javajava反射反射内内 容容n n反射的基本概念n n反射的基本用途n n反射的实现机制n n反射的代码示例n n反射进阶: 动态代理技术什么是什么是java反射反射? 太宗照镜子,通过镜子知道自己衣冠是

2、否整齐,镜子太宗照镜子,通过镜子知道自己衣冠是否整齐,镜子“ “告知告知” ”太宗衣冠情况;太宗衣冠情况; 太宗纳谏,魏征告知太宗有哪些得失;太宗纳谏,魏征告知太宗有哪些得失; 对某个对某个javajava对象调用对象调用javajava反射,客户端程序知道该反射,客户端程序知道该javajava对象具备哪些属性和方法;对象具备哪些属性和方法; 人需要反思,对象也需要自查;人可以通过镜子或他人的反照、反映来反思;人需要反思,对象也需要自查;人可以通过镜子或他人的反照、反映来反思; java reflectionjava reflection本身就包含了反射、映象、倒影等含义,借鉴了社会生活中的

3、概本身就包含了反射、映象、倒影等含义,借鉴了社会生活中的概念,无论社会思想还是技术思想,在很多时候和地方是殊途同归的。念,无论社会思想还是技术思想,在很多时候和地方是殊途同归的。 所谓反射,可以理解为在运行时期获取对象类型信息的操作。传统的编程方所谓反射,可以理解为在运行时期获取对象类型信息的操作。传统的编程方法要求程序员在编译阶段决定使用的类型,但是在反射的帮助下,编程人员可以法要求程序员在编译阶段决定使用的类型,但是在反射的帮助下,编程人员可以动态获取这些信息,从而编写更加具有可移植性的代码。动态获取这些信息,从而编写更加具有可移植性的代码。 什么是什么是java反射反射? Java反射指

4、的是可以在运行时加载、探知和使用编译期间完全未知的java类的能力。 换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造信息,并生成其对象实体,或对其属性设值,或调用其方法。这种“看透class”的能力被称为introspection(内省、内观、反省)。 java反射的用途反射的用途 正衣冠、知兴替、明得失正衣冠、知兴替、明得失 动态获取某个动态获取某个javajava对象的属性、方法、动态创建实例对象的属性、方法、动态创建实例 反射机制是如今很多流行框架的实现基础,其中包括反射机制是如今很多流行框架的实现基础,其中包括SpringSpring、Hibernate

5、Hibernate等。理解了反射,可以从实质上掌握这些开等。理解了反射,可以从实质上掌握这些开源框架,知其然而且知其所以然,并能轻松学习相关技术,源框架,知其然而且知其所以然,并能轻松学习相关技术,快速提高技术水平。快速提高技术水平。如何实现如何实现java反射反射? java.lang.reflectjava.lang.reflect包是专门用于实现包是专门用于实现javajava反射的包,几个关键类:反射的包,几个关键类: FieldField:提供有关类或接口的单个字段的信息及对它的动态访问权限:提供有关类或接口的单个字段的信息及对它的动态访问权限( (类字段或实例字段类字段或实例字段)

6、 ) Method Method:提供关于类或接口上单独某个方法(以及如何访问该方法)的信息:提供关于类或接口上单独某个方法(以及如何访问该方法)的信息, ,类方法或实类方法或实 例方法(包括抽象方法)。例方法(包括抽象方法)。 ConstructorConstructor:提供关于类的单个构造方法的信息以及对它的访问权限。:提供关于类的单个构造方法的信息以及对它的访问权限。 ModifierModifier:提供了类和成员访问修饰符的信息:提供了类和成员访问修饰符的信息 ProxyProxy:用于创建动态代理类和实例:用于创建动态代理类和实例 几个关键方法:几个关键方法: Class.for

7、Name(String className) Class.forName(String className) :返回与带有给定字符串名的类或接口相关联的:返回与带有给定字符串名的类或接口相关联的 Class Class 对象。对象。 getClassgetClass:返回此:返回此 Object Object 的运行时类的运行时类 getFieldgetField:返回类或接口的指定公共字段:返回类或接口的指定公共字段( (属性属性) )信息,包括其各级父类信息,包括其各级父类 getDeclaredFieldgetDeclaredField:返回类自身的属性信息:返回类自身的属性信息, ,不

8、包括父类不包括父类, ,可以返回私有属性可以返回私有属性, ,但需调用但需调用 field.setAccessable(true)field.setAccessable(true) getMethod getMethod:返回类或接口的指定方法返回类或接口的指定方法( (属性属性) )信息,包括其各级父类信息,包括其各级父类 getDeclaredgetDeclaredMethod: Method: 返回类自身的所有方法返回类自身的所有方法, ,不包括父类不包括父类, ,可以返回私有方法可以返回私有方法, ,但需调用但需调用 method.setAccessable(true)method.s

9、etAccessable(true) getConstructorgetConstructor:返回类的构造方法返回类的构造方法 newInstancenewInstance:实例化一个类实例化一个类 isInstanceisInstance:判定指定的:判定指定的 Object Object 是否与此是否与此 Class Class 所表示的对象赋值兼容。所表示的对象赋值兼容。 java反射代码示例反射代码示例 1 为了较为容易地理解为了较为容易地理解javajava反射,我们特准备了如反射,我们特准备了如下代码:下代码: MirrorMirror类类: :模拟现实生活中的镜子模拟现实生活中

10、的镜子, ,专门用来折射人专门用来折射人的影子的影子, ,让人看到自己的形貌等信息。让人看到自己的形貌等信息。 PersonPerson类类: :模拟现实生活的人模拟现实生活的人, ,具有姓名、年龄、性具有姓名、年龄、性别等基本信息。别等基本信息。 MirrorMirror类通过调用类通过调用getClass() getField()getClass() getField()等等javajava反射反射API,API,实现对实现对PersonPerson对象的反射对象的反射, ,获取其相关信息。获取其相关信息。java反射代码示例反射代码示例 1:Personpackagepackage co

11、m.test; com.test;publicpublic classclass Person Person public public String name; / String name; /姓名姓名 privateprivate intint age; / age; /年龄年龄 /构造函数构造函数 publicpublic Person() Person() this this.name = .name = 张三张三; ; this this.age = 26;.age = 26; public public intint getAge() getAge() return return

12、age; age; public public voidvoid setAge( setAge(intint age) age) this this.age = age;.age = age; java反射代码示例反射代码示例1:Mirrorpackagepackage com.test; com.test;importimport java.lang.reflect.Field; java.lang.reflect.Field;publicpublic classclass Mirror Mirror / /获取获取( (反射反射) )某个人的某个信息某个人的某个信息 publicpubli

13、c Object getPersonInfo(Object person,String info) Object getPersonInfo(Object person,String info)throwsthrows Exception Exception / /获取存储人员对象自身信息的获取存储人员对象自身信息的ClassClass对象对象, ,这个这个ClassClass对象相当于人员对象的档案对象相当于人员对象的档案, ,记录了记录了 /该人员的所有信息该人员的所有信息 Class personDoc = person.getClass();Class personDoc = pers

14、on.getClass(); / /创建一个创建一个personInfopersonInfo对象对象, ,用来存储个人的特定信息用来存储个人的特定信息 Field personInfo = personDoc.getField(info);Field personInfo = personDoc.getField(info); / /从从personInfopersonInfo对象中取出该人员的特定信息并返回对象中取出该人员的特定信息并返回 returnreturn personInfo.get(person); personInfo.get(person); public public st

15、aticstatic voidvoid main(String args) main(String args) throwsthrows Exception Exception Mirror mirror = Mirror mirror = newnew Mirror(); Mirror(); Person person = Person person = newnew Person(); Person(); Object personInfo = mirror.getPersonInfo(person, name); Object personInfo = mirror.getPersonI

16、nfo(person, name); System. System.outout.println(info:+personInfo);.println(info:+personInfo); java反射代码示例反射代码示例2JavaJava反射的另外一个代码实例:反射的另外一个代码实例:WeiZhengWeiZheng类类: : 模拟历史人物魏征模拟历史人物魏征, ,专门负责了解皇帝的专门负责了解皇帝的信息,并唐太宗对谏言。信息,并唐太宗对谏言。TaiZongTaiZong类类: : 模拟历史人物唐太宗模拟历史人物唐太宗, ,具有姓名、年龄、具有姓名、年龄、是否勤政等基本信息(属性),并具有征

17、税、发动是否勤政等基本信息(属性),并具有征税、发动战争等权力(方法)。战争等权力(方法)。具体请看代码操作演示:具体请看代码操作演示: java反射代码示例反射代码示例 2:WeiZhengpackagepackage com.test; com.test;importimport java.lang.reflect.Constructor; java.lang.reflect.Constructor;importimport java.lang.reflect.Field; java.lang.reflect.Field;importimport java.lang.reflect.Met

18、hod; java.lang.reflect.Method;publicpublic classclass WeiZheng WeiZheng / / 获取获取( (反射反射) )某个人的某个信息某个人的某个信息 publicpublic Object getTaiZongInfo(Object taiZong, String info) Object getTaiZongInfo(Object taiZong, String info) throwsthrows Exception Exception / / 获取存储人员对象自身信息的获取存储人员对象自身信息的ClassClass对象对象,

19、 ,这个这个ClassClass对象相当于人员对象的档案对象相当于人员对象的档案, ,记录了记录了该人员的所有信息该人员的所有信息 Class taiZongDoc = taiZong.getClass();Class taiZongDoc = taiZong.getClass(); Field taiZongInfo = taiZongDoc.getField(info); / Field taiZongInfo = taiZongDoc.getField(info); / 创建一个创建一个personInfopersonInfo对象对象, ,用来存储个人的用来存储个人的特定信息特定信息 r

20、eturnreturn taiZongInfo.get(taiZong); / taiZongInfo.get(taiZong); / 从从personInfopersonInfo对象中取出该人员的特定信息并返回对象中取出该人员的特定信息并返回 / /魏征对太宗谏言魏征对太宗谏言( (利用反射调用某个利用反射调用某个javajava对象的方法对象的方法) ) public public Object advive(Object owner, String methodName) Object advive(Object owner, String methodName) throwsthrow

21、s Exception Exception Class taiZong = owner.getClass(); Class taiZong = owner.getClass(); Method method = taiZong.getMethod(methodName); Method method = taiZong.getMethod(methodName); return return method.invoke(owner); method.invoke(owner); java反射代码示例反射代码示例2:WeiZheng public public Object newTaiZong

22、(String className) Object newTaiZong(String className)throwsthrows Exception Exception Class taiZongDoc = Class. Class taiZongDoc = Class.forNameforName(className);(className); /Constructor taiZong = taiZongDoc.getConstructor(); /Constructor taiZong = taiZongDoc.getConstructor(); return return taiZo

23、ngDoc.newInstance(); taiZongDoc.newInstance(); public public staticstatic voidvoid main(String args) main(String args) throwsthrows Exception Exception WeiZheng weiZheng = WeiZheng weiZheng = newnew WeiZheng(); WeiZheng(); TaiZong taiZong = TaiZong taiZong = newnew TaiZong(); TaiZong(); Object taiZo

24、ngInfo = weiZheng.getTaiZongInfo(taiZong, name); Object taiZongInfo = weiZheng.getTaiZongInfo(taiZong, name); System. System.outout.println(.println(信息信息: + taiZongInfo);: + taiZongInfo); weiZheng.advive(taiZong, noTax); weiZheng.advive(taiZong, noTax); weiZheng.advive(taiZong, noWar); weiZheng.advi

25、ve(taiZong, noWar); TaiZong taiZong2 = (TaiZong)weiZheng.newTaiZong(com.test.TaiZong); TaiZong taiZong2 = (TaiZong)weiZheng.newTaiZong(com.test.TaiZong); Object taiZongInfo2 = weiZheng.getTaiZongInfo(taiZong2, name); Object taiZongInfo2 = weiZheng.getTaiZongInfo(taiZong2, name); System. System.outou

26、t.println(.println(信息信息: + taiZongInfo2);: + taiZongInfo2); java反射代码示例反射代码示例 2:TaiZongpackagepackage com.test; com.test;/*/* * * 太宗太宗 * * authorauthor Administrator Administrator */ */publicpublic classclass TaiZong TaiZong extendsextends Person Person public public booleanboolean isWorkHard; / isWo

27、rkHard; /是否勤政是否勤政 publicpublic TaiZong() TaiZong() super super.name = .name = 唐太宗李世民唐太宗李世民; ; super super.setAge(56);.setAge(56); this this.isWorkHard = .isWorkHard = truetrue; ; public public voidvoid noTax() noTax() System. System.outout.println(.println(减税减税);); public public voidvoid noWar() noW

28、ar() System. System.outout.println(.println(停止征战停止征战);); java反射进阶反射进阶: 动态代理动态代理1. 1.普通代理模式普通代理模式普通代理模式普通代理模式 代理为其他对象提供一种代理以控制对这个对象的访问。在某些情代理为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。客户端和目标对象之间起到中介的作用。 涉及到的角色:涉及到的角色: 抽象角色抽象角色抽象角色抽象角色:声明

29、真实对象和代理对象的:声明真实对象和代理对象的共同接口共同接口共同接口共同接口;比如颁旨;比如颁旨 代理角色代理角色代理角色代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作:代理对象角色内部含有对真实对象的引用,从而可以操作真实象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能真实象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象同时,代理对象可以在执行真实对象操作时,附加其他的代替真实对象同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。比如操作,相当于对真实对象进行封装。比如: :宰相按照皇帝的旨意,代替皇宰相按照皇帝

30、的旨意,代替皇帝颁旨,宰相就是代理角色。皇帝自称天子,代天巡牧,在这种情况下,帝颁旨,宰相就是代理角色。皇帝自称天子,代天巡牧,在这种情况下,皇帝就是代理角色。皇帝就是代理角色。 真实角色真实角色真实角色真实角色:代理角色所代表的真实对象,是我们最终要引用的对象。:代理角色所代表的真实对象,是我们最终要引用的对象。比如,宰相是代理角色,皇帝就是真实角色;皇帝若是代理角色,则上比如,宰相是代理角色,皇帝就是真实角色;皇帝若是代理角色,则上天就是真实角色。天就是真实角色。普通代理示例普通代理示例: Subject packagepackage com.test.proxy; com.test.pr

31、oxy;/*/* * * 抽象角色抽象角色 * * authorauthor Administrator Administrator * * */ */abstractabstract publicpublic classclass Subject Subject abstract abstract publicpublic voidvoid request(); request(); 普通代理示例普通代理示例: RealSubject packagepackage com.test.proxy; com.test.proxy;/*/* * * 真实角色真实角色 * * authorautho

32、r Administrator Administrator * * */ */publicpublic classclass RealSubject RealSubject extendsextends Subject Subject publicpublic RealSubject() RealSubject() publicpublic voidvoid request() request()System.System.outout.println(From real subject.);.println(From real subject.); 普通代理示例普通代理示例: ProxySu

33、bject packagepackage com.test.proxy; com.test.proxy;/*/* * * 代理角色代理角色 * * authorauthor Administrator Administrator */ */publicpublic classclass ProxySubject ProxySubject extendsextends Subject Subject privateprivate RealSubject realSubject; / RealSubject realSubject; /以真实角色作为代理角色的属性以真实角色作为代理角色的属性pub

34、licpublic ProxySubject() ProxySubject() / / 该方法封装了真实对象的该方法封装了真实对象的requestrequest方法方法publicpublic voidvoid request() request() preRequest(); preRequest(); if if (realSubject = (realSubject = nullnull) realSubject = realSubject = newnew RealSubject(); RealSubject(); realSubject.request();/ realSubject

35、.request();/ 此处执行真实对象的此处执行真实对象的requestrequest方法方法 postRequest();postRequest(); privateprivate voidvoid preRequest() preRequest()/ something you want to do before requesting/ something you want to do before requesting privateprivate voidvoid postRequest() postRequest()/ something you want to do after

36、 requesting/ something you want to do after requesting 普通代理示例普通代理示例: Client packagepackage com.test.proxy; com.test.proxy;/*/* * * 客户端客户端 * * authorauthor Administrator Administrator * * 客户实际需要调用的是客户实际需要调用的是RealSubjectRealSubject类的类的request()request()方法,现在用方法,现在用ProxySubjectProxySubject * * 来代理来代理Re

37、alSubjectRealSubject类,同样达到目的,同时还封装了其他方法类,同样达到目的,同时还封装了其他方法(preRequest(),postRequest()(preRequest(),postRequest(), * * 可以处理一些其他问题。可以处理一些其他问题。 * */ /publicpublic classclass Client Client public public staticstatic voidvoid main(String args) main(String args) Subject sub= Subject sub=newnew ProxySubjec

38、t(); ProxySubject(); sub.request(); sub.request(); java反射进阶:动态代理反射进阶:动态代理 普通代理模式的缺点:普通代理模式的缺点: 真实角色必须是事先已经存在的,并将其作为真实角色必须是事先已经存在的,并将其作为代理对象的内部属性。但是实际使用时,一个真实代理对象的内部属性。但是实际使用时,一个真实角色必须对应一个代理角色,如果大量使用会导致角色必须对应一个代理角色,如果大量使用会导致类的类的急剧膨胀急剧膨胀急剧膨胀急剧膨胀; 此外,如果事先并不知道真实角色,该如何使此外,如果事先并不知道真实角色,该如何使用代理呢?用代理呢? java

39、反射进阶:动态代理反射进阶:动态代理2. 2.动态代理类动态代理类 JavaJava动态代理类位于动态代理类位于Java.lang.reflectJava.lang.reflect包下,一般主要涉及到以下两个类:包下,一般主要涉及到以下两个类: (1)(1)InvocationHandlerInvocationHandler:该接口中仅定义了一个方法:该接口中仅定义了一个方法: invokeinvoke(Object obj, Method method, Object args)(Object obj, Method method, Object args) 参数参数objobj指代理类,指

40、代理类,methodmethod是被代理的方法,是被代理的方法,argsargs为该方法的参数数组。为该方法的参数数组。 (2)(2)ProxyProxy:该类即为动态代理类,作用类似于上例中的:该类即为动态代理类,作用类似于上例中的ProxySubjectProxySubject,其中主要包含以下内容:,其中主要包含以下内容: Protected Protected ProxyProxy(InvocationHandler h) (InvocationHandler h) 构造函数,用于给内部的构造函数,用于给内部的h h赋值。赋值。 Class Class getProxyClassget

41、ProxyClass (ClassLoader loader, Class interfaces) (ClassLoader loader, Class interfaces) 获得一个代理类,其中获得一个代理类,其中loaderloader是类装载器,是类装载器,interfacesinterfaces是真实类所拥有的全部接口组成的数组。是真实类所拥有的全部接口组成的数组。 Static Object Static Object newProxyInstancenewProxyInstance(ClassLoader loader, Class interfaces, InvocationH

42、andler h) (ClassLoader loader, Class interfaces, InvocationHandler h) 返回代理类的一个实返回代理类的一个实例,返回后的代理类可以当作被代理类使用例,返回后的代理类可以当作被代理类使用( (可使用被代理可使用被代理类在类在SubjectSubject接口中声明过的方法接口中声明过的方法) )。javajava反射进阶:动态代理反射进阶:动态代理反射进阶:动态代理反射进阶:动态代理 所谓所谓Dynamic ProxyDynamic Proxy是这样一种是这样一种classclass:它是在运行时生:它是在运行时生成的成的clas

43、sclass,在生成时必须提供一组,在生成时必须提供一组interfaceinterface给它,然后该给它,然后该classclass就宣称它实现了这些就宣称它实现了这些 interfaceinterface。可以把该。可以把该classclass的实例当的实例当作这些作这些interfaceinterface中的任何一个来用。这个中的任何一个来用。这个Dynamic ProxyDynamic Proxy其其实就是一个实就是一个ProxyProxy,它不会作实质性的工作,在生成它的实,它不会作实质性的工作,在生成它的实例时,必须提供一个例时,必须提供一个handlerhandler,由它接管

44、,由它接管实际实际实际实际的工作。的工作。 JavaJava动态代理代码示例动态代理代码示例动态代理代码示例动态代理代码示例 : SubjectSubject packagepackage com.test.proxy.dynamic; com.test.proxy.dynamic;publicpublic interfaceinterface Subject Subject abstract abstract publicpublic voidvoid request(); request(); JavaJava动态代理代码示例动态代理代码示例动态代理代码示例动态代理代码示例 : RealS

45、ubjectRealSubjectpackagepackage com.test.proxy.dynamic; com.test.proxy.dynamic;/*/* * * 真实角色真实角色 * * authorauthor Administrator Administrator * * */ */publicpublic classclass RealSubject RealSubject implementsimplements Subject Subject public public RealSubject( ) RealSubject( ) public public voidvo

46、id request( ) request( ) System. System.outout.println(From real subject.);.println(From real subject.); JavaJava动态代理代码示例动态代理代码示例动态代理代码示例动态代理代码示例 : DynamicSubjectDynamicSubjectpackage com.test.proxy.dynamic;package com.test.proxy.dynamic;import java.lang.reflect.Method;import java.lang.reflect.Metho

47、d;import java.lang.reflect.InvocationHandler;import java.lang.reflect.InvocationHandler;/动态代理角色,必须实现动态代理角色,必须实现InvocationHandlerInvocationHandler接口接口public class DynamicSubject implements public class DynamicSubject implements InvocationHandlerInvocationHandler private Object sub;private Object sub;

48、 public DynamicSubject() public DynamicSubject() public DynamicSubject(Object obj) public DynamicSubject(Object obj) sub = obj;sub = obj; public Object public Object invokeinvoke(Object (Object proxyproxy, Method , Method methodmethod, Object , Object argsargs) throws Throwable ) throws Throwable Sy

49、stem.out.println(before calling +method); System.out.println(before calling +method); method. method.invokeinvoke(sub,args);(sub,args); System.out.println(after calling + method); System.out.println(after calling + method); return null; return null; JavaJava动态代理代码示例:动态代理代码示例:动态代理代码示例:动态代理代码示例: Clien

50、tClientpackage com.test.proxy.dynamic;package com.test.proxy.dynamic;import java.lang.reflect.InvocationHandler;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Proxy;import java.lang.reflect.Proxy;public class Client public class Client public static void main(String args) throws

51、 Throwable public static void main(String args) throws Throwable RealSubject rs = new RealSubject(); / RealSubject rs = new RealSubject(); /指定被代理类指定被代理类 InvocationHandlerInvocationHandler ds = new DynamicSubject(rs); / ds = new DynamicSubject(rs); /初始化代理类初始化代理类 Class cls = rs.getClass(); /Class cls

52、= rs.getClass(); /获得被代理类的获得被代理类的ClassClass对象对象 /创建代理类的实例创建代理类的实例, ,生成代理主题生成代理主题 /参数:被代理类的参数:被代理类的ClassLoader,ClassLoader,实现的接口,代理类实现的接口,代理类(InvocationHandler(InvocationHandler) ) Subject subject = (Subject) Proxy. Subject subject = (Subject) Proxy.newProxyInstancenewProxyInstance(cls.getClassLoader(),(cls.getClassLoader(), cls.getInterfaces(), ds ); cls.getInterfaces(), ds ); / /调用抽象代理角色接口调用抽象代理角色接口 声明的方法声明的方法 subject.request()subject.request()

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号