首页 > 解决方案 > 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 文件夹。

(所以我不使用注释处理器。也许 - 我不知道 - 这是更好的方法,因为注释处理器不是最好的方法,得到优化的代码? - >这里我不确定......)

所以我正在寻找最好的解决方案。你会怎么解决这个问题?

标签: javaperformanceannotationscode-generationannotation-processing

解决方案


推荐阅读