面向中文技术社区(首发 CSDN)的 APS(Accelerated Proxy Solution) 博客系列。目标是讲清楚一个高性能 Java 动态代理库「为什么快、怎么用、底层怎么实现」,为开源仓库引流并启发读者思考。
仓库地址:https://github.com/LamSpace/aps
仓库内用户指南:docs/guide/(13 章,中英双语)
aps-blog/
├── README.md # 本文件:系列导航 + 大纲 + 发布说明
├── posts/ # 11 篇博客(Markdown)
└── examples/ # 单个可运行 Maven 工程,按章分 package
├── pom.xml
├── README.md # 如何 build & run
└── src/main/java/io/github/lamspace/blog/ch01…ch11/
| # |
文件 |
标题 |
一句话 |
| 01 |
posts/01-intro.md |
一行代理告别反射:Java 动态代理新选择 APS |
痛点 → 一个 API 代理类与接口 → 首个可跑示例 → 特性总览 |
| # |
文件 |
标题 |
一句话 |
| 02 |
posts/02-method-grouping.md |
方法分组:Group 如何做到零热路径开销 |
Group.of/otherwise、first-match-wins、未匹配零开销透传 |
| 03 |
posts/03-annotation-api.md |
注解驱动拦截:@Intercept / @Around 的声明式玩法 |
注解 API、lambda 级速度、何时用注解 vs lambda |
| 04 |
posts/04-constructor-interception.md |
构造器拦截:ConstructorInterceptor 的参数改写与否决 |
before/after、参数改写、veto |
| 05 |
posts/05-static-method-proxy.md |
静态方法代理:proxyStatic 遮蔽 public static 方法 |
场景、用法、限制 |
| 06 |
posts/06-multi-interface.md |
多接口与非 public 接口代理 |
一个对象实现多接口、冲突检测、非 public 接口 |
| 07 |
posts/07-hot-reload.md |
热重载与热替换:evict / evictClassLoader / rebind |
热部署、live 实例换拦截器 |
| 08 |
posts/08-jpms.md |
JPMS 强封装:--add-opens 与快速失败 |
强封装模块、privateLookupIn、可操作的报错提示 |
| # |
文件 |
标题 |
一句话 |
| 09 |
posts/09-dispatch-internals.md |
从方法调用到字节码:APS 分发机制逐层拆解 |
为什么反射/MethodHandle 慢 → switch + INVOKESPECIAL → javap 验证 |
| 10 |
posts/10-jit-gc-safety.md |
为什么能被 JIT 内联,又为什么 GC 安全 |
JIT 内联原理、WeakCache 键设计、hidden class |
| # |
文件 |
标题 |
一句话 |
| 11 |
posts/11-benchmark.md |
APS vs CGLib vs Proxy:实测对比与基准方法学 |
JMH 数据、结论、怎么测才公平 |
- 动机 / 场景:先讲痛点或需求,让读者有代入感
- 核心 API:贴关键代码 + 逐行说明
- 完整可跑示例:指向
examples/ 对应 package,正文贴关键片段
- 预期输出:跑出来的输出就是文章里的输出
- 坑与限制:诚实说明边界
- 延伸阅读:指向仓库
docs/guide/ 对应章节 + 仓库链接
# 0. 先把 aps 安装到本地仓库(仓库还没上 Maven Central)
cd ~/workspace/aps
mvn -s /home/lam/repo/settings.xml install -DskipTests
# 1. 编译并运行某一章示例
cd ~/workspace/aps-blog/examples
mvn -s /home/lam/repo/settings.xml compile
mvn -s /home/lam/repo/settings.xml -q exec:java -Dexec.mainClass=io.github.lamspace.blog.ch01.Main
详见 examples/README.md。
- 文章为标准 GFM Markdown,CSDN 的 Markdown 编辑器可直接粘贴渲染。
- 约定:代码块带语言标签(
java/bash/text);用表格与有序/无序列表;不使用 GitHub 专属语法(task list - [ ]、脚注 [^1]、mermaid 图),避免 CSDN 渲染异常。
- 图解优先用 ASCII 代码块(
text 语言标签)。
- 每篇结尾的统一引流句:
> 本文示例代码见 [aps-blog/examples](https://github.com/LamSpace/aps-blog),框架源码与完整文档见 [APS 仓库](https://github.com/LamSpace/aps)。