# fox-proxy-framework **Repository Path**: dongchenglin/fox-proxy-framework ## Basic Information - **Project Name**: fox-proxy-framework - **Description**: 《Java古法编程(二)》配套代码:动态代理与 AOP 底层原理 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-08 - **Last Updated**: 2026-05-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Fox 动态代理框架 《Java古法编程(二)》配套代码:**动态代理与 AOP 底层原理** ## 项目结构 ``` fox-proxy-framework/ ├── pom.xml └── src/main/java/com/fox/ancient/ ├── framework/ │ ├── annotation/ │ │ ├── Select.java # 查询注解(模拟 @Select) │ │ └── Insert.java # 插入注解(模拟 @Insert) │ └── mapper/ │ ├── MapperInvocationHandler.java # Mapper 代理核心处理器 │ └── FoxSqlSession.java # 仿 MyBatis SqlSession ├── demo/ │ ├── staticproxy/ │ │ ├── Shopping.java # 静态代理:商品接口 │ │ ├── RealShopping.java # 静态代理:真实实现 │ │ ├── ShoppingProxy.java # 静态代理:代理类 │ │ └── StaticProxyDemo.java │ ├── jdkproxy/ │ │ ├── JDKShoppingHandler.java # JDK 动态代理处理器 │ │ └── JDKProxyDemo.java │ └── cglibproxy/ │ ├── CGLIBShoppingInterceptor.java # CGLIB 拦截器 │ ├── CGLIBProxyFactory.java # CGLIB 代理工厂 │ └── CGLIBProxyDemo.java └── test/ ├── entity/ │ └── User.java # 用户实体类 ├── mapper/ │ └── UserMapper.java # Mapper 接口(无实现类!) └── MainApplication.java # 主启动类(H2 内存数据库) ``` ## 快速运行 > **注意**:如果使用 Java 17+,运行 CGLIB 演示时需要添加 `--add-opens` 参数: > ```bash > MAVEN_OPTS="--add-opens java.base/java.lang=ALL-UNNAMED" mvn exec:java ... > ``` ```bash # 编译 mvn compile # 运行 MyBatis Mapper 代理演示(H2 内存数据库,无需安装 MySQL) mvn exec:java -Dexec.mainClass="com.fox.test.MainApplication" # 运行 JDK 动态代理演示 mvn exec:java -Dexec.mainClass="com.fox.ancient.demo.jdkproxy.JDKProxyDemo" # 运行 CGLIB 动态代理演示(Java 17+ 需要 MAVEN_OPTS) MAVEN_OPTS="--add-opens java.base/java.lang=ALL-UNNAMED" mvn exec:java -Dexec.mainClass="com.fox.ancient.demo.cglibproxy.CGLIBProxyDemo" # 运行静态代理演示 mvn exec:java -Dexec.mainClass="com.fox.ancient.demo.staticproxy.StaticProxyDemo" ``` ## 核心知识点 | 示例 | 对应文章章节 | 核心原理 | |------|----------|---------| | StaticProxyDemo | 1.1 静态代理的局限性 | 手动编写代理类,类爆炸 | | JDKProxyDemo | 2.4 手写 JDK 动态代理 | Proxy + InvocationHandler | | CGLIBProxyDemo | 3.3 手写 CGLIB 代理 | Enhancer + MethodInterceptor | | MainApplication | 4.2 手写 MyBatis Mapper 代理 | 注解解析 + JDBC + 反射映射 | ## 依赖说明 - **H2**:内存数据库,零环境依赖,clone 即可运行 - **CGLIB**:字节码生成库,用于 CGLIB 动态代理演示 ## 配套文章 > 《Java古法编程(二):动态代理与 AOP 底层原理 —— 手写 MyBatis Mapper 接口代理》 > > 公众号:**Fox爱分享** | 知识星球:**Fox爱分享**