使用Java在编译时生成代码?

时间:2011-03-24 17:05:42

标签: java code-generation compile-time

我创建了一组表示RESTful资源的类,以及实际执行HTTP请求以检索和构建对象的其他帮助程序。 我的课程看起来像这样:

class MyResource{
    Attribute id = new Attribute(this, long);
    Attribute name = new Attribute(this, String);
    /* etc */
}

现在碰巧我想使用POJO类来插入一个喜欢处理POJO的框架。

我希望代理看起来像这样:

class MyResourceProxy{
    private MyResource realResource;

    public MyResourceProxy(MyResource o){realResource = o;}

    public long getId(){
        return realResource.id.get();
    }

    public void setId(long value){
        realResource.id.set(value);
    }

    public String getName(){
        return realResource.name.get();
    }

    public void setName(String value){
        realResource.name.set(value);
    }        
}

我不想维护这些代理类的代码,只需要维护“资源类型”主类的代码。

我研究了内省,并发现了如何根据需要生成所述代理代码的提示。 问题是:是否可以在编译时生成代码,然后将其与库一起编译?也许我走错了路,我做了一些无趣的事情,但是;)

你怎么看? 谢谢!

2 个答案:

答案 0 :(得分:2)

这取决于您构建系统的内容,如果您的意思是javac,那么我会拒绝,但如果您使用antmaven则可以。

代码生成器有很多例子。

在你的情况下,我会在已编译的MyResource类上使用反射。我会考虑使用Velocity帮助模板化课程。在你的情况下它可能有点过分,但是当你生成更多代码时它可能是有用的。

答案 1 :(得分:1)

您是否尝试过使用依赖注入来实例化生成类?

Basic example for DI