2014-07-24 32 views
0

假設,我們沒有訪問一些需要的服務器,同時在我們的機器上調試程序。所以我們需要一個存根。但是,然後每次我想要構建沒有存根,我需要評論我的存根代碼並取消註釋實際代碼,所以它看起來很髒。如果我能以某種方式配置構建以避免這種評論/取消註釋,那將會很好。我還沒有想出任何好的決定。IntelliJ的想法:配置存根

例如,一些代碼

public class SingeFormatServiceClient { 
     public static final QName SERVICE_NAME = new QName("http://creditregistry.ru/2010/webservice/SingleFormatService", "SingleFormatService"); 

     public SingleFormatService Connect(){ 
      URL wsdlURL = SingleFormatService_Service.WSDL_LOCATION; 

      SingleFormatService_Service ss = new SingleFormatService_Service(wsdlURL, SERVICE_NAME); 
      return ss.getSingleFormatServiceHttpPort(); 
     } 

     public SingleFormatService Connect(){ 
      return new SingleFormatServiceStub(); 
    } 
} 

所以第一功能是實際,第二是存根。可能有一種方法不能發表評論,但只是說建設者,現在我想用第一個功能進行構建,現在 - 與第二個? 謝謝。

+0

爲什麼不使用系統屬性來選擇哪個實現? – ThomasEdwin

+0

托馬斯,你的意思是JVM的說法?這就是我現在正在做的,但我希望有更優雅的方式:) – Anatoly

+0

請看我的回答 – ThomasEdwin

回答

1

使用System.getProperty()來實例化一個實現。例如:

SingleFormatService service = (SingleFormatService) Class.forName(
    System.getProperty("single_format_service_class", 
    "your.comp.SingleFormatServiceStub")).getConstructor().newInstance(); 

您的實現必須提供非參數構造函數。在你的JVM參數,指定了工人階級,即

-Dsingle_format_service_class=your.comp.SingleFormatServiceActual 

在IntelliJ IDEA的,你可以使用不同的JVM ARGS指定多個運行配置。

注意: IMO許多圖書館都是這樣使用的。 Hibernate使用hibernate.cache.provider_class來選擇要使用的緩存提供程序實現。