2011-03-24 43 views
1

我创建了一组表示RESTful资源的类以及实际执行HTTP请求来检索和构建对象的其他帮助器。 我的课是这样的:在编译时使用Java生成代码?

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); 
    }   
} 

我不希望有维护的代码对那些代理类,但只有“资源型”大师班。

我看着自省,发现如何根据需要生成所述代理代码的提示。 问题是:是否有可能在编译时生成代码,然后将它与库一起编译?也许我错了,我做了一些没有趣的事情);

你觉得呢? 谢谢!

+0

如果客户端代码是动态的,是如何的客户端代码的用户应该处理呢? – 2011-03-24 17:54:45

+0

那么客户端代码用户会知道要使用哪些类/方法,但我想确保代理类始终是最新的。 – 2011-03-25 10:47:46

回答

2

这取决于你建立的系统是什么,如果你的意思是javac,那么我会说不,但如果你使用antmaven那么你可以。

有很多代码生成器的例子。

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

+1

我会考虑这个选项,谢谢。 – 2011-03-25 12:21:04

1

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

Basic example for DI

+0

我会喜欢更轻的东西,但谢谢你的提示。 – 2011-03-25 12:20:05