面试系列-java代理模式-背诵版

106 阅读2分钟

2042629.jpg

Java代理模式

  • 动态代理:在实现阶段不用关心代理谁,而在运行阶段才指定代理哪个一个对象
  • 静态代理:由开发者实现代理类在进行编译,程序运行前,代理的.class文件就存在了

1. 代理模式定义

代理模式就是给一个对象提供代理,去控制对这个原对象的访问,实现对其的功能增强等附加的操作

2. 代理模式的优点

  • 职责清晰(各自做自己的事情,在代码中主要体现在proxy实现的接口)
  • 高扩展性 (在代理类中可以实现需要的接口,在代理中做任何的动作增强)
  • 智能化(例如Spring AOP 反射)

3. 代理模式的缺点

  • 部分场景可能会造成请求的处理速度变慢

    代理就是在原有的基础上做了增强了,多了一部分额外的代码,如果是复杂的业务,或者操作其他服务可能出现延时

  • 实现代理模式需要额外的工作

4. 动态代理(基于Java反射实现)

相比较静态代理,动态代理可以很方便地对委托类进行统一的增强处理

动态代理的常见实现方式为两种:

  1. JDK动态代理
  2. CGLIB动态代理

常见问题(1)、JDK动态代理和CGLIB的区别

JDK代理的类是通过接口实现的,CGLIB动态代理时通过子类来实现的,在代码实现上JDK动态代理是实现InvocationHandler而CGLIB是实现MethodInterceptor

常见问题(2)、为什么 JDK 动态代理要基于接口实现?而不是基于继承来实现?

因为JDK动态代理生成的对象默认继承了Proxy的类,而Java是单继承的,所以JDK代理要通过接口实现