java - java:注解处理器+代码生成
问题描述
以下问题:
class Testcontroller
{
@endpoint
@roleAdmin
public void test1(Request req)
{
}
@endpoint
@roleModerator
public void test2(Request req)
{
}
}
处理后,应该是这样的结果:
class Testcontroller
{
public void handleRequest(Request req)
{
switch (req.endpoint)
{
case "test1":
if (req.role.hasAdmin()) this.test1(req);
break;
case "test2":
if (req.role.hasModerator()) this.test2(req);
break;
}
}
public void test1(Request req)
{
}
public void test2(Request req)
{
}
}
这里的问题是,java 注释处理器不能替换现有的源/类,但只能生成一次新的。好的,有一个解决方案,可以修改现有代码,但它是一个 hacky 解决方案,我想不是优雅的方式。
那我能做什么?也许我的注释处理器创建了一个新类 TestcontrollerIntern,它通过角色检查获得了我的 switch-case 块。它将请求委托给原始 Testcontroller-methods 的方法。但是,我在对象之间有不必要的委托。
以及如何让我的程序了解新生成的(代理)类?我想我必须手动操作?或者我必须再次使用反射?
我还能做什么?我可以将我的整个代码库复制到一个 tmp 文件夹,解析我的注释并在该 tmp 文件夹中替换我的代码示例所建议的 java-source-data-files。之后,我编译我的项目(在 tmp 文件夹中)并删除该 tmp 文件夹。
(所以我不使用注释处理器。也许 - 我不知道 - 这是更好的方法,因为注释处理器不是最好的方法,得到优化的代码? - >这里我不确定......)
所以我正在寻找最好的解决方案。你会怎么解决这个问题?
解决方案
推荐阅读
- wordpress - 显示锚内容的 Wordpress 插件
- python - 您如何使用 Xpath - Python 单击页面上的所有文本
- c# - 不会让我在我的 cshtml 页面上拉我的列表
- sql - 当 Where 子句与 PostgreSQL 数据库中的条目不匹配时返回空行
- amazon-web-services - 无法使用 OpenAPI 3.0.0 规范执行基本验证
- laravel - 我正在寻找自定义 laravel 默认身份验证的最佳方法
- python - 链接的 Python 版本错误
- python - 混淆所有hadler的日志输出
- hadoop - 从 hdfs cli 查询时,纱线站点配置返回奇异值
- swift - 初始化问题之前使用的另一个变量“__”