ApplicationContext 생성시 xml 위치설정

자바(JAVA)

ApplicationContext 생성시 xml 위치가 일반적인 컴파일된 클래스 폴더 위치에 있지

않을 때

 

ApplicationContext 를 생성하기 위해 xml 로딩해야되는데 보통의 위치는 컴파일된

클래스위치를 기준으로 잡아 폴더를 설정하기 때문에 별 문제없이 작업이 가능하다.

 

하지만 web application 프로젝트로 xml 을 다른 위치에 두고 작업을 하고자 할때는

ClassPathXmlApplicationContext 클래스를 사용해서 ApplicationContext를 생성하기 힘들다.

xml 위치를 찾지 못하기 때문이다.

 

ApplicationContext 생성을 위해 xml 위치를 찾기위한 2가지 방법이 있는데 WEB-INF/classes

폴더에 xml 관련 설정파일들을 집어넣는것이다. 수동으로 복사해서 넣어도 되지만

eclipse 에서 build path 를 설정하게 되면 자동으로 복사해서 넣어준다.

프로젝트 설정정보를 열어 java build path 를 클릭한다. Source 탭으로 이동한후

Add Folder 를 클릭하여 컴파일 폴더인 classes 에 출력될수 있도록 추가한다.

 

추가하고자하는 폴더를 선택한다


설정된 build path Edit 를 클릭하여 상세설정에서 inclusion patterns 에 포함하고자 하는

폴더와 Exclusion patterns 제외하고자 하는 폴더를 설정하여 집어넣고 끝내면

원하는 폴더나 파일만 classes 폴더에 output 으로 출력할수 있다.


WEB-INF/classes 폴더에 application xml 설정파일들이 추가된 것을 볼수있다.
 


두번째 방법은 소스에서 찾는 방법인데 FileSystemXmlApplicationContext 클래스를 사용해서

ApplicationContext 생성하는 것이다. Servlet 을 사용할수 있는 컨트롤 클래스일때에는

getServletContext().getRealPath(“/WEB-INF”);  사용해서 위치를 쉽게 얻을수 있겠지만

단위 테스트를 시행하는 경우에는 getResource 함수파라미터로 현재 클래스명을 넘겨

URL 클래스를 리턴받은후 getPath() 를 통해 경로를 얻으면 된다.

그런다음 절대경로를 조합해서 FileSystemXmlApplicationContext 파라미터 값으로 넘기면

ApplicationContext 를 생성할수 있다.

 

String path = this.getClass().getResource(“MockUserServiceTest.class”).getPath();

path = path.substring(0, path.lastIndexOf(“/classes”));

 

//String str = getServletContext().getRealPath(“/WEB-INF”);

ApplicationContext ctx = new

   FileSystemXmlApplicationContext(path + “/config/common/applicationContext.xml”);


Posted by 녹두장군