Java中动态代理和静态代理的区别案例

原创 系统管理员 2024-09-18 14:03 149阅读 0赞

在Java中,动态代理(Dynamic Proxying)和静态代理(Static Proxying)是两种不同的代理实现方式。它们的主要区别体现在以下几个方面:

  1. 创建时机

    • 静态代理:在编译时确定代理类,生成的字节码包含代理代码。
    • 动态代理:在运行时通过反射或Proxy对象动态生成代理类。
  2. 代理实现

    • 静态代理:通常使用一个抽象接口来定义代理方法。代理类实现了这个接口并重写了代理方法。
    • 动态代理:通过反射技术,创建一个方法的引用,并在执行这个方法时,调用我们自定义的逻辑。

案例示例:

  1. 静态代理
    ```java
    // 定义抽象接口
    public interface MyProxyable {
    void doSomething();
    }

// 静态代理类实现接口并重写
public class StaticProxy implements MyProxyable {
private final MyProxyable target;

  1. public StaticProxy(MyProxyable target) {
  2. this.target = target;
  3. }
  4. @Override
  5. public void doSomething() {
  6. System.out.println("Doing something via static proxy.");
  7. target.doSomething();
  8. }

}

// 使用静态代理
public class Main {
public static void main(String[] args) {
MyProxyable target = new StaticProxy(new ConcreteDoer()); // 用实际对象替换

  1. target.doSomething(); // 调用代理方法
  2. }

}

  1. 2. **动态代理**:
  2. ```java
  3. // 定义抽象接口
  4. public interface MyProxyable {
  5. void doSomething();
  6. }
  7. // 动态代理类,通过反射实现
  8. public class DynamicProxy implements MyProxyable {
  9. private final MyProxyable target;
  10. public DynamicProxy(MyProxyable target) {
  11. this.target = target;
  12. }
  13. @Override
  14. public void doSomething() {
  15. System.out.println("Doing something via dynamic proxy.");
  16. Method method = target.getClass().getMethod("doSomething")); // 使用反射获取目标方法
  17. Proxy.invoke(target, new Object[]{}), method); // 调用代理对象的Proxy方法,执行动态代理
  18. }
  19. }
  20. // 使用动态代理
  21. public class Main {
  22. public static void main(String[] args) {
  23. MyProxyable target = new DynamicProxy(new ConcreteDoer()); // 用实际对象替换
  24. target.doSomething(); // 调用代理方法
  25. }
  26. }

以上两种代理方式在实现目标功能的同时,也体现了Java中动态特性。

文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。

发表评论

表情:
评论列表 (有 0 条评论,149人围观)

还没有评论,来说两句吧...

相关阅读

    相关 java静态代理动态代理

    静态代理和动态代理是Java中常用的两种代理模式。 1. 静态代理: 静态代理是通过手动编写代理类来实现的。在静态代理中,代理类和被代理类都实现同一个接口,代理类持有被代理

    相关 动态代理静态代理区别

     一、概念     代理模式是常用的Java设计模式,它的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事