FileSystemResource vs ClassPathResource
FileSystemResource는 경로가 프로젝트 최상위 폴더 부터 시작하고 ClassPathResource는 자원의 경로를 패키지로 구분합니다. 따라서 아무것도 안쓰면 default 패키지에 있는 것으로 인식합니다.
public class MemberBeanTest {
@Test
public void createBean(){
Resource resource = new FileSystemResource("beanConfiguration.xml");
BeanFactory bf = new XmlBeanFactory(resource);
assertNotNull(bf.getBean("member"));
}
}
@Test
public void createBean(){
Resource resource = new FileSystemResource("beanConfiguration.xml");
BeanFactory bf = new XmlBeanFactory(resource);
assertNotNull(bf.getBean("member"));
}
}
이렇게 FileSystemResource를 사용하여 설정 파일의 위치를 나타낼 경우 저 파일은 아래 그림과 같이 프로젝트 최상위 폴더에 있어야 합니다.
public class MemberBeanTest {
@Test
public void createBean(){
Resource resource = new ClassPathResource("beanConfiguration.xml");
BeanFactory bf = new XmlBeanFactory(resource);
assertNotNull(bf.getBean("member"));
}
}
@Test
public void createBean(){
Resource resource = new ClassPathResource("beanConfiguration.xml");
BeanFactory bf = new XmlBeanFactory(resource);
assertNotNull(bf.getBean("member"));
}
}
이렇게 코드를 바꾼뒤에 테스트를 실행하면 BeanDefinitionStoreException이 발생합니다. 이 Exception은 bean 설정 파일을 못찾거나 설정 파일이 잘 못 됐을 때 발생하는 에러 입니다.
위 처럼 설정 파일의 위치를 소프 폴더로 옮겨 놓으면 됩니다.
이번에는 conf 라는 디렉토리 밑으로 설정 파일을 옮겼습니다. 도저히 패키지 명을 사용해서 접근할 방법은.. 모르겠네요; 없지 않나요.ㅋ; 이때는 아래 처럼 FileSystemResource의 생성자 인자로 쩜 하나를 사용해서 상대 경로로 찾아가게 할 수 있습니다.
public class MemberBeanTest {
@Test
public void createBean(){
Resource resource = new FileSystemResource("./conf/beanConfiguration.xml");
BeanFactory bf = new XmlBeanFactory(resource);
assertNotNull(bf.getBean("member"));
}
}
@Test
public void createBean(){
Resource resource = new FileSystemResource("./conf/beanConfiguration.xml");
BeanFactory bf = new XmlBeanFactory(resource);
assertNotNull(bf.getBean("member"));
}
}