2017-02-06 1 views
0

그래서 EAR을위한 유틸리티 JAR을 구축 중이며 XML 문자열이 필요한 정적 메소드를 제공하는 클래스가 있습니다. 내 JAR에 리소스로 XML 파일을 내장하고 있는데 정적 블록 클래스 초기화 시간에 읽어 :정적 초기화 블록 내에서 리소스를 가져와야합니까?

동료 코더는 그가 그 디자인에 충격을했지만 (이유를 명확하게 설명 할 수없는 나에게 말했다
static{ 
    try { 
     base = IOUtils.toString(CartSessionFactory.class.getResourceAsStream("/createcartTemplate.xml")); 
     if(base==null){ 
      throw new Exception("createcartTemplate.xml not found as a resource"); 
     } 
     //check the file correctness 
     //[...] 
      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

대신 싱글턴을 만드는 것이 좋습니다). 그래도 작동하는 것 같습니다. 그것은 왜 나쁜 디자인인가?

+0

'base == null' 인 경우 어떻게됩니까? 에서,이 블록이 실행 된 후에? 누군가가'base'를 처음 사용하려고하면 어떻게 될까요? –

+0

리소스 로딩과 관련이 없지만 관심을 가져야 할 사항 중 하나는 'if'입니다. 스파게티 코드를 피하기 위해 Java에 'goto'기능이 없습니다. 고의적으로 예외를 던져서 외부의 'try'에 의해 잡히게되면 (무시해도) 그것은'goto'와 같은 행동을합니다. 이것은 강하게 낙심 한 연습입니다. – BackSlash

+0

"대신에 싱글턴을 권장 함으로"이 사람에게 좋은 이유를 줄 수 있겠습니까? –

답변

0

나는이 종속성을 클래스에 삽입하고 하드 코딩하지 않을 것이다. 이 모듈을 테스트하는 것은 리소스를 주입하는 것만 큼 쉽지는 않습니다.

+0

더 구체적으로 할 수 있습니까? 의존성 주사에 대해서? 클래스의 파일에 의존성을 어떻게 주입합니까? –

관련 문제