음, 물론 많은이에 대한 해결책 및 수행하는 한 가지 방법은 기본 값으로 시스템 속성을 사용하는 것입니다있다 :
private static final String DEFAULT_ENDPOINT = "http://myapi....";
private static final String ENDPOINT =
System.getProperty("my.endpoint", DEFAULT_ENDPOINT);
이렇게하면 문제를 해결할 수있는 구성 방법이 생깁니다. -D
매개 변수를 예로
private static final String ENDPOINT;
static {
// do initialization here but do not throw any exceptions (bad practice)
// you can e.g. read from files etc...
// Then assign your constant...
ENDPOINT =
}
시스템 등록 정보는 명령 줄에서 전달되는 :
java -Dmy.endpoint=http://...
를 정적 상수를 초기화 할 때 더 많은 유연성을 필요로하는 경우도
정적 초기화를 사용할 수 있습니다
하지만 내 의견으로는 더 나은 접근은 에 실제로 값을 입력합니다. 사용 :
public class ClassThatIsUsingTheConfig {
private final String endpoint;
public ClassThatIsUsingTheConfig(final String endpoint) {
this.endpoint = endpoint;
}
public void someMethod() {
// use endpoint
}
}
그런 다음 호출자 클래스에서 사용할 끝점을 선택하십시오. 테스트 케이스에서, 이것은 모의하기가 매우 쉬울 것입니다.
public class MyTest {
@Test
public void testMethod() {
ClassThatIsUsingTheConfig var = new ClassThatIsUsingTheConfig(TEST_ENDPOINT);
var.someMethod();
}
}
public class MyProdClass {
public void prodMethod() {
ClassThatIsUsingTheConfig var = new ClassThatIsUsingTheConfig(PROD_ENDPOINT);
var.someMethod();
}
}
dependency injection here에 대한 자세한 내용을 볼 수 있습니다. 당신은 그런 Spring Framework 또는 CDI 등의 관리 종속성을 프레임 워크의 일종을 사용하는 경우 보조 노트에
,이다 그 어떤 환경에 따라 다양한 방법으로 속성과 상수 (예 : 주입 할 수있을 것이 일반적이다 현재 실행 중임). 스프링 프레임 워크를 사용하는 경우 예, 당신은 속성의 파일에서 모든 상수를 선언하고 속성을 사용하여 주석을 삽입 할 수 있습니다
@Autowired
public ClassWhoIsUsingTheConfig(@Value("my.endoint") final String endpoint) {
this.endpoint = endpoint;
}
자극에 대한 속성 파일의 라인을 따라 수 :
my.endpoint=http://prodserver...
시험에 대한 등록 정보 파일은 다음과 같을 것이다 wheras :
my.endpoint=http://testserver...
종속성 주입 엔진을 사용하는 방법은 매우 플렉스 수 있습니다 코드를 테스트 할 때 외부 상수, 경로, 리소스 등을 처리 할 수있는 방법을 제공하고 수명을 단순화합니다.
'String ENDPOINT'가 정적이어야한다면,이 메소드는 설정 파일이나 다른 데이터 소스에서 적절한 값을 읽는'static' 메소드의 결과 값을 할당하십시오.이것은 WSDL 및 JAX-WS로 작업 할 때의 문제점 중 하나입니다. –