IT评测·应用市场-qidao123.com技术社区

标题: Java 代理模式深度解析:静态代理与动态代理的实战指南 [打印本页]

作者: 曂沅仴駦    时间: 2025-2-20 14:45
标题: Java 代理模式深度解析:静态代理与动态代理的实战指南
在 Java 开发中,代理模式是一种非常重要的筹划模式,广泛应用于 AOP(面向切面编程)、动态代理等领域。本文将结合代码示例和思维导图,深入解析 Java 中的代理模式,包括静态代理和动态代理的实现方式及其应用场景。
1. 什么是代理

代理模式的核心思想是:给目标对象提供一个代理对象,并由代理对象控制对目标对象的引用。代理对象可以在不修改目标对象的情况下,对目标对象的功能举行加强或控制访问。

2. 代理的目的

代理模式的主要目的是:
3. 怎样实当代理

在 Java 中,代理的实现方式主要有两种:

4. 静态代理

4.1 静态代理的结构

静态代理的核心结构如下:


4.2 静态代理的代码示例

4.2.1 目标类

  1. package com.qcby;
  2. public class ClothesFactory implements ByClothes {
  3.     @Override
  4.     public void clothes(String size) {
  5.         System.out.println("已经给您定制好了一件大小为 " + size + " 的衣服");
  6.     }
  7.     public void 机器处理() {
  8.         System.out.println("机器正在处理衣服");
  9.     }
  10.     public void 原材料() {
  11.         System.out.println("准备原材料");
  12.     }
  13. }
复制代码
4.2.2 代理类

  1. package com.qcby;
  2. public class Proxy implements ByClothes {
  3.     private ClothesFactory clothesFactory = new ClothesFactory();
  4.     @Override
  5.     public void clothes(String size) {
  6.         FrontService();
  7.         clothesFactory.clothes(size);
  8.         endService();
  9.     }
  10.     // 前置服务
  11.     public void FrontService() {
  12.         System.out.println("根据您的需求进行市场调研");
  13.     }
  14.     // 后置服务
  15.     public void endService() {
  16.         System.out.println("为您提供一条龙的包办服务");
  17.     }
  18. }
复制代码
4.2.3 测试类

  1. package com.qcby;
  2. public class Test {
  3.     public static void main(String[] args) {
  4.         Proxy proxy = new Proxy();
  5.         proxy.clothes("XXXL");
  6.     }
  7. }
复制代码
4.2.4 输出结果

  1. 根据您的需求进行市场调研
  2. 已经给您定制好了一件大小为 XXXL 的衣服
  3. 为您提供一条龙的包办服务
复制代码
4.3 静态代理的优缺点

优点:


缺点:


5. 动态代理

5.1 动态代理的原理

动态代理的核心是利用 Java 的反射机制,在运行时动态生成代理类。动态代理类实现了与目标类相同的接口,并通过 InvocationHandler 接口来拦截方法调用。
5.2 JDK 动态代理的代码示例

5.2.1 目标类

  1. package com.qcby;
  2. public class ClothesFactory implements ByClothes {
  3.     @Override
  4.     public void clothes(String size) {
  5.         System.out.println("已经给您定制好了一件大小为 " + size + " 的衣服");
  6.     }
  7. }
复制代码
5.2.2 代理工厂类

  1. package com.qcby;
  2. import java.lang.reflect.InvocationHandler;
  3. import java.lang.reflect.Method;
  4. import java.lang.reflect.Proxy;
  5. public class DyProxy implements InvocationHandler {
  6.     private Object target;
  7.     public DyProxy(Object target) {
  8.         this.target = target;
  9.     }
  10.     public Object getProxyInterFace() {
  11.         return Proxy.newProxyInstance(
  12.             target.getClass().getClassLoader(),
  13.             target.getClass().getInterfaces(),
  14.             this
  15.         );
  16.     }
  17.     @Override
  18.     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
  19.         FrontService();
  20.         Object result = method.invoke(target, args);
  21.         endService();
  22.         return result;
  23.     }
  24.     // 前置服务
  25.     private void FrontService() {
  26.         System.out.println("根据您的需求进行市场调研");
  27.     }
  28.     // 后置服务
  29.     private void endService() {
  30.         System.out.println("为您提供一条龙的包办服务");
  31.     }
  32. }
复制代码
5.2.3 测试类

  1. package com.qcby;
  2. public class Test {
  3.     public static void main(String[] args) {
  4.         ClothesFactory clothesFactory = new ClothesFactory();
  5.         ByClothes proxy = (ByClothes) new DyProxy(clothesFactory).getProxyInterFace();
  6.         proxy.clothes("XXXL");
  7.     }
  8. }
复制代码
5.2.4 输出结果

  1. 根据您的需求进行市场调研
  2. 已经给您定制好了一件大小为 XXXL 的衣服
  3. 为您提供一条龙的包办服务
复制代码
5.3 动态代理的优缺点

优点:


缺点:


6. 静态代理与动态代理的对比

特性静态代理动态代理代理类生成时间编译时生成运行时生成代码量较多,每个目标类需要一个代理类较少,同一通过动态代理工厂生成机动性较低较高性能较高较低(依靠反射机制) 7. 总结

代理模式是 Java 开发中非常重要的筹划模式,静态代理和动态代理各有优缺点,适用于差别的场景。在实际开发中,动态代理由于其机动性和可扩展性,被广泛应用在 AOP、RPC 等领域。
通过本文的代码示例和思维导图,相信你对 Java 代理模式有了更深入的理解。希望这篇文章对你有所资助!
如果你有任何题目或发起,欢迎在批评区留言,我们一起交换学习!




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4