Java静态代理和动态代理的区别

一、静态代理
代理模式可以在不修改被代理对象的基础上,通过扩展代理类,进行一些功能的附加与增强。代理类和被代理类应该共同实现一个接口,或者是共同继承某个类。

优点:可以在不修改目标对象的前提下扩展目标对象的功能。
缺点:
  冗余:由于代理对象要实现与目标对象一致的接口,会产生过多的代理类。
  不易维护:一旦接口增加方法,目标对象与代理对象都要进行修改。

二、动态代理
动态代理利用了 JDK API,动态地在内存中构建代理对象,从而实现对目标对象的代理功能。

动态代理又被称为 JDK 代理或接口代理。静态代理与动态代理的区别主要在:

静态代理在编译时就已经实现,编译完成后代理类是一个实际的 class 文件
动态代理是在运行时动态生成的,即编译完成后没有实际的 class 文件,而是在运行时动态生成类字节码,并加载到 JVM 中
注意:动态代理对象不需要实现接口,但是要求目标对象必须实现接口,否则不能使用动态代理。

JDK 中生成代理对象主要涉及两个类,第一个类为 java.lang.reflect.Proxy,通过静态方法 newProxyInstance 生成代理对象,第二个为 java.lang.reflect.InvocationHandler 接口,通过 invoke 方法对业务进行增强

JDK动态代理基于Java的反射机制

 

posted @ 2023-03-27 11:48  大枇杷  阅读(375)  评论(0编辑  收藏  举报