Java静态代理和动态代理

Java静态代理: 其实就是设计模式中的一种; 如下图所示: 

Java静态代理

静态代理的缺点:

Proxy类其实没有实际的内容,它只是实现了相同的接口,所有的请求都是代理到realSubject对象来处理。 如果系统中需要代理的类比较多,会导致系统内的类的数量增多,系统结果比较臃肿和松散。 


Java动态代理:

在Java代码的运行时动态的创建这个proxy对象,当这个proxy对象生命周期结束的时候自动回收。这样就避免了静态代理的大量的冗余类的问题了。 


Java动态代理实现的两种方式: 

1)JDK自带的动态代理方式; 要求被代理的类必须有接口实现; 

这种方式的底层是使用反射来实现的。 

2)使用CGLIB来实现动态代理; 不要求类必须实现接口; 只要方法不是final的就可以; 

cglib的使用还是非常简单的,如下图: 

CGLIB的使用示例

CGLIB的底层是通过ASM字节码操纵工具来实现的。 

常见的字节码操纵工具有:

a)asm : 比较底层,基本上是通过JVM的汇编指令来操作的; 需要对class文件结果比较了解。 

b)javassist : 使用起来比较简单。 

c)BCEL

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容