
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
代理模式是程序员在学习java编程开发技术的时候需要重点掌握的两种编程技术,而今天我们就一起来了解一下,代理模式的概念与反射机制。
一、静态代理
所谓静态代理也就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就确定了。
上面的代码就是实现了一个静态代理;其实静态代理就已经能够满足上述需求了,为什么还需要动态代理呢?这里就涉及到静态代理的两个缺点了
代理对象的一个接口只服务于一种类型的对象,如果要代理的方法很多,势必要为每一种方法都进行代理,在程序规模稍大时静态代理代理类就会过多会造成代码混乱
如果接口增加一个方法,除了所有实现类需要实现这个方法外,所有代理类也需要实现此方法,增加了代码维护的复杂度。
基于上述两个问题,动态代理诞生了~
二、动态代理
动态代理是在程序运行时,通过反射获取被代理类的字节码内容用来创建代理类
具体什么是动态代理呢?
名词:动态,动态在程序中就是表达在程序运行时就根据配置自动的生成代理类并且代理类和被代理类是在运行时才确定相互之间的关系;
在JDK中包含两种动态代理的实现机制:JDKProxy和CGLib;
三、反射
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
比如,在上述所说的组装代理类字节码时,在获取被代理类的所有方法时,就调用了Method[]var5=var4.getMethods();反射中的getMethods方法,通过反射获取到了被代理类的所有方法,这样我们就可以在运行时获取到任何类的所有的字节码信息了!从而可以组装出我们想要的代理类字节码!
所以说,反射也为动态代理的实现提供了理论支持!!因为只有在运行时能获取到对应类的信息,才可以通过信息创造出对应的我们所需要的代理类;
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请在707945861群中学习了解。