2011-03-24 72 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