2011-10-15 39 views
1

我有一個協議棧的實現,其中每個層接收到下面層的構造,以便與他們交流,如:Java接口實現類文件

ApplicationLayer app = 
     new ApplicationLayer(
       new DataLinkLayer(
        new PhysicalLayer() 
)); 

我需要在這裏它的控制類爲了通過改變一個文件來改變圖層類型(不是.java之類的,就像.xml一樣)。其中一個可能的用法是實現每個層之間記錄層,如:

ApplicationLayer app = 
      new ApplicationLayer( 
        new AppLogLayer( 
         new DataLinkLayer(
           new DataLinkLogLayer(
            new PhysicalLayer() 
)))); 

就這樣,我的源代碼保持產量不變(在這裏我們不需要登錄)和發展(我需要日誌記錄),只需通過更改外部(到.jar)文件。

有沒有什麼框架可以做到這一點?優先使用Eclipse集成。

回答

2

聽起來像你想要控制庫的依賴注入/反轉。 Spring和Guice是典型的例子,雖然對於這樣簡單的事情,你可能只是旋轉自己的東西。

1

你可以看看使用谷歌Guice庫的依賴注入。

1

SLF4J你在部署更改日誌德法只改變一個罐子。

請參見:http://www.slf4j.org/也許可以幫助你。

+0

據我所知,SLF4J只是用於日誌記錄。記錄它只是一個實際的例子,我真正需要做的是通過改變文件來改變變量類和構造函數參數(Guice似乎完成了這項工作) – rnunes

0

如果你只是在尋找一種方法,使開發時間登錄與生產時間沒有記錄,你可能只是使用日誌框架的日誌級別設施或便於在Java中,很多未使用的斷言功能(> 1.4) 。這將比改變不同環境的源代碼更清潔。

上斷言一句:您可以啓用/通過傳遞參數給你的JVM禁止在JVM的斷言設施。斷言代碼不是被執行(如果該標誌是打開的),或者如果該標誌是被執行的。見http://java.sun.com/developer/technicalArticles/JavaLP/assertions/

斷言實踐建議和羅伯特·西蒙斯「鐵桿的Java」一書中所描述的,如果我記錯。