Skip to main content
上述配套图展示一次 HTTP 请求自路由命中、参数装配、容器解析控制器实例、方法调用到返回的全链路流程。
1. 路由注册与命中
- 路由在加载阶段由控制器元数据注册到框架路由表,包含 method/path/host 以及控制器与方法绑定信息。
- 命中时,路由层创建 handler 并将请求和上下文交由该 handler 处理。
2. Handler 参数装配与中间件
- 根据控制器和方法上的装饰器(如 @HTTPBody/@HTTPParam/@HTTPQuery/@HTTPHeaders/@Cookies/@Request/@Context 等)解析参数来源并装配调用参数。
- 先后执行控制器级与方法级中间件(若有),校验、鉴权或其他横切逻辑。
3. 容器解析控制器实例
- Handler 通过容器工厂按原型与限定信息解析控制器实例(getOrCreateEggObject)。
- 按原型的生命周期策略(SINGLETON/CONTEXT/ALWAYS_NEW)与依赖注入规则,创建或复用实例,执行必要的生命周期钩子。
4. 执行控制器方法
- 组装参数后调用真实对象的方法(Reflect.apply(realMethod, realObj, args))。
- 方法返回值根据框架约定写入响应(JSON/流/状态码等)。
5. 元数据与契约对照
- ControllerMetadata/MethodMeta:来源于装饰器收集,驱动路由注册、参数装配和中间件绑定。
- EggPrototype/LoadUnit:标识类所属模块与原型,影响容器解析与实例查找。
- LifecycleHook:约束对象创建/销毁前后逻辑,容器在合适时机调用。
6. 故障与可观测性
- 在任何阶段发生错误,按统一错误处理流程转换为 HTTP 响应(含状态码和错误体),并打点记录关键阶段耗时与错误。
7. 对应源码线索
- 路由注册/控制器元数据:plugin/controller/* 目录(ControllerRegister/HTTPMethodRegister 等)。
- 容器解析与对象实例:core 下容器与原型相关实现(EggContainerFactory/EggPrototype 等)。
- 装饰器与方法元数据:core/types 与相关 decorator 定义位置。
如需我把上面每个点补充为“源码精确链接 + 行号索引”,请告知,我将继续补充。