Download the PHP package ysh/webman-annotation without Composer
On this page you can find all versions of the php package ysh/webman-annotation. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download ysh/webman-annotation
More information about ysh/webman-annotation
Files in ysh/webman-annotation
Package webman-annotation
Short Description Webman Annotation plugin - Production-ready annotation system for webman framework with security, performance and reliability
License MIT
Homepage https://github.com/x2nx/webman-annotation
Informations about the package webman-annotation
Webman Annotation Plugin
一个功能完整、生产就绪的 Webman 框架注解插件,支持路由、中间件、依赖注入、定时任务、事件监听和自定义注解等功能。
📋 目录
- 功能特性
- 安装
- 快速开始
- 配置说明
- 路由注解
- 中间件注解
- 依赖注入
- Bean 管理
- 定时任务
- 事件监听
- 自定义注解
- 性能优化
- 高级功能
- 常见问题
- API 参考
- 最佳实践
✨ 功能特性
核心功能
- ✅ 路由注解 - 支持 8 种 HTTP 方法注解(GET, POST, PUT, PATCH, DELETE, OPTIONS, TRACE, HEAD)
- ✅ 中间件注解 - 支持类级别和方法级别的中间件配置
- ✅ 依赖注入 - 支持
#[Inject]和#[Value]注解自动注入 - ✅ Bean 管理 - 使用
#[Bean]注解管理单例对象 - ✅ 定时任务 - 使用
#[Cron]注解定义定时任务,支持分布式锁 - ✅ 事件监听 - 使用
#[Event]注解注册事件监听器 - ✅ 自定义注解 - 支持用户自定义注解和处理器
高级特性
- ✅ 循环依赖自动处理 - 自动检测并处理循环依赖,用户无感
- ✅ 懒加载支持 -
#[Inject]支持懒加载,延迟实例化 - ✅ 注解白名单/黑名单 - 只解析已实现和配置的注解,提高性能
- ✅ 性能优化 - 静态缓存、扫描优化,减少反射开销
- ✅ 多进程安全 - 定时任务支持分布式锁,确保多进程环境下不重复执行
- ✅ 程序内调用 - 支持在代码中手动执行自定义注解
🚀 安装
使用 Composer 安装
系统要求
- PHP >= 8.1
- Webman Framework >= 2.0
- Workerman Crontab >= 1.0
可选依赖
webman/log>= 2.0 - 用于日志记录webman/event>= 1.0 - 用于事件监听功能webman/channel>= 1.0 - 用于定时任务动态注册webman/cache>= 2.0 - 用于缓存和分布式锁(已包含在 require 中)
🎯 快速开始
1. 安装插件
2. 配置文件
安装后,配置文件会自动复制到 config/plugin/x2nx/webman-annotation/ 目录。
3. 创建第一个注解路由
4. 重启服务
访问 http://localhost:8787/ 即可看到响应。
⚙️ 配置说明
主配置文件 (app.php)
配置文件位置:config/plugin/x2nx/webman-annotation/app.php
进程配置 (process.php)
定时任务监控进程配置(已自动配置,通常无需修改):
中间件配置 (middleware.php)
自定义注解中间件配置(已自动配置):
🛣️ 路由注解
支持的 HTTP 方法注解
本包支持以下 HTTP 方法注解:
#[GetMapping]- GET 请求#[PostMapping]- POST 请求#[PutMapping]- PUT 请求#[PatchMapping]- PATCH 请求#[DeleteMapping]- DELETE 请求#[OptionsMapping]- OPTIONS 请求#[TraceMapping]- TRACE 请求#[Route]- 支持多种 HTTP 方法
基础用法
路由前缀和分组
路由命名
路由参数
🛡️ 中间件注解
类级别中间件
方法级别中间件
多个中间件
💉 依赖注入
[Value] 注解 - 配置值注入
#[Value] 注解用于注入配置值或环境变量。
基础用法
支持的键格式
类型转换
[Inject] 注解 - 服务注入
#[Inject] 注解用于注入服务依赖。
基础用法(类型提示注入)
命名注入
懒加载
注意:懒加载仅适用于属性类型为 object 或 mixed,或者没有类型提示的情况。
循环依赖自动处理
本包自动检测并处理循环依赖,用户无需修改代码:
工作原理:
- 系统自动检测循环依赖
- 使用正在构建的实例打破循环
- 不抛出异常,用户无感
- 记录警告日志(用于调试)
组合使用
🏭 Bean 管理
使用 #[Bean] 注解将类注册为单例对象到容器中。
基础用法
命名 Bean
Bean 与依赖注入结合
⏰ 定时任务
使用 #[Cron] 注解定义定时任务。
基础用法
Cron 表达式格式
格式:秒 分 时 日 月 周
常用示例:
参数说明
- expression: Cron 表达式(秒级精度),格式:
秒 分 时 日 月 周 - singleton:
true- 使用单例模式,所有执行共享同一个实例(默认)false- 每次执行创建新实例
注意:multiProcess 参数已移除,定时任务默认使用分布式锁确保只在一个进程中执行。如果需要多进程执行,请使用动态注册方式。
依赖注入支持
定时任务支持 #[Value] 和 #[Inject] 注解:
动态注册定时任务
除了使用注解,还可以动态注册定时任务:
多进程和分布式锁
定时任务默认使用分布式锁(基于 webman/cache)确保在多进程环境下不会重复执行:
- 首先尝试使用 Cache(支持 file、redis 等驱动)
- 如果 Cache 不可用,任务将跳过执行
锁的 TTL 为 300 秒(5分钟),确保即使进程异常退出,锁也会自动释放。
📢 事件监听
使用 #[Event] 注解注册事件监听器。
基础用法
触发事件
一个方法监听多个事件
优先级
依赖注入支持
事件监听器支持 #[Value] 和 #[Inject] 注解:
🎨 自定义注解
支持用户自定义注解和处理器。
1. 创建注解类
2. 创建处理器
3. 配置注解映射
在 config/plugin/x2nx/webman-annotation/app.php 中配置:
4. 使用自定义注解
5. 程序内调用自定义注解
使用场景:
- 在定时任务中手动触发注解
- 在事件监听器中执行注解
- 在命令行脚本中执行注解
- 在单元测试中验证注解行为
⚡ 性能优化
注解白名单/黑名单
本包实现了注解白名单和黑名单机制,只解析已实现和配置中注册的注解,大幅提高扫描性能。
白名单(自动包含)
以下注解会自动包含在白名单中:
- 路由注解:
Route,RoutePrefix,RouteGroup,Controller,HttpGet,PostMapping,PutMapping,PatchMapping,DeleteMapping,OptionsMapping,TraceMapping - 中间件:
Middleware - 依赖注入:
Value,Inject - Bean:
Bean - 定时任务:
Cron - 事件:
Event - 自定义注解:配置在
annotations中的注解
黑名单配置
缓存机制
扫描优化
- 自动跳过没有白名单注解的类
- 静态缓存反射结果
- 减少重复扫描
🔧 高级功能
循环依赖自动处理
本包自动检测并处理循环依赖,用户无需修改代码。详见 CIRCULAR_DEPENDENCY.md。
懒加载
使用 #[Inject(lazy: true)] 实现懒加载:
注意:懒加载仅适用于属性类型为 object 或 mixed,或者没有类型提示的情况。
动态任务注册
❓ 常见问题
Q: 路由注解不生效?
A: 检查以下几点:
- 确保
auto_register_routes配置为true - 确保控制器类在
scan_dirs配置的目录中 - 重启 Webman 服务:
php start.php restart - 检查路由文件
config/plugin/x2nx/webman-annotation/route.php是否存在
Q: 依赖注入失败?
A: 检查以下几点:
- 确保
enable_value_injection配置为true - 确保属性类型提示正确
- 检查容器配置
config/container.php是否正确 - 查看日志文件中的错误信息
Q: 定时任务不执行?
A: 检查以下几点:
- 确保
auto_register_crons配置为true - 确保
cron_monitor.enable配置为true - 检查进程配置
config/plugin/x2nx/webman-annotation/process.php - 查看日志文件中的错误信息
- 确保
workerman/crontab已安装
Q: 事件监听器不执行?
A: 检查以下几点:
- 确保
auto_register_events配置为true - 确保
webman/event已安装 - 检查事件名称是否正确
- 查看日志文件中的错误信息
Q: 循环依赖如何处理?
A: 本包自动检测并处理循环依赖,用户无需修改代码。系统会:
- 自动检测循环依赖
- 使用正在构建的实例打破循环
- 不抛出异常,用户无感
- 记录警告日志(用于调试)
Q: 如何提高扫描性能?
A:
- 启用缓存:
enable_cache => true - 配置黑名单,排除不需要扫描的类
- 使用 Redis 作为缓存驱动
- 减少扫描目录范围
📚 API 参考
注解类
路由注解
X2nx\WebmanAnnotation\Attributes\RouteX2nx\WebmanAnnotation\Attributes\GetMappingX2nx\WebmanAnnotation\Attributes\PostMappingX2nx\WebmanAnnotation\Attributes\PutMappingX2nx\WebmanAnnotation\Attributes\PatchMappingX2nx\WebmanAnnotation\Attributes\DeleteMappingX2nx\WebmanAnnotation\Attributes\OptionsMappingX2nx\WebmanAnnotation\Attributes\TraceMappingX2nx\WebmanAnnotation\Attributes\RoutePrefixX2nx\WebmanAnnotation\Attributes\RouteGroupX2nx\WebmanAnnotation\Attributes\Controller
其他注解
X2nx\WebmanAnnotation\Attributes\MiddlewareX2nx\WebmanAnnotation\Attributes\ValueX2nx\WebmanAnnotation\Attributes\InjectX2nx\WebmanAnnotation\Attributes\BeanX2nx\WebmanAnnotation\Attributes\CronX2nx\WebmanAnnotation\Attributes\Event
工具类
X2nx\WebmanAnnotation\Helper\AnnotationsExecutor- 程序内执行自定义注解X2nx\WebmanAnnotation\Helper\CronHelper- 动态注册定时任务X2nx\WebmanAnnotation\Helper\AnnotationWhitelist- 注解白名单/黑名单管理
接口
X2nx\WebmanAnnotation\Contracts\AnnotationsHandlerInterface- 自定义注解处理器接口
🎯 最佳实践
1. 路由组织
2. 依赖注入
3. 定时任务
4. 事件监听
5. 性能优化
📝 更新日志
详见 CHANGELOG.md(如果存在)
🤝 贡献
欢迎提交 Issue 和 Pull Request!
📄 许可证
MIT License
🔗 相关链接
Made with ❤️ for Webman Framework