2014-07-24 5 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 인수에서, 노동 계급을 지정 즉 인 IntelliJ 아이디어에서

-Dsingle_format_service_class=your.comp.SingleFormatServiceActual 

, 서로 다른 JVM 인수를 사용하여 여러 실행 구성을 지정할 수 있습니다.

NB. IMO 많은 도서관이 그런 식으로 사용합니다. Hibernate는 hibernate.cache.provider_class을 사용하여 사용할 캐시 제공자 구현을 선택한다.

관련 문제