본문 바로가기
Spring Boot/스프링 부트로 배우는 자바 웹 개발

스프링 XML 설정

by 코리늬 2018. 7. 25.

3.2.2 스프링 XML 설정

스프링 컨테이너에 클래스를 등록하면 스프링이 클래스의 인스턴스를 관리해 준다.

스프링 컨테이너에 bean을 등록하고 설정하는 방법은 XML, annotation 두 가지가 있다.


3.2.2.1 스프링 라이브러리 추가

필요한 라이브러리가 의존성 전이 현상으로인해 자동으로 클래스패스에 추가해 주지만, 명시적으로 필요한 라이브러리를 추가하는 것이 좋다고 한다.


3.2.2.2 스프링 applicationContext.xml 설정

스프링 라이브러리를 추가했으면 스프링을 통해 클래스들의 인스턴스를 관리할 수 있는 applicationContext.xml 파일을 작성한다.

1~4라인 : applicationContext 파일 자체를 위한 내용이다. XML 선언과 태그를 사용하기 위한 xsd파일의 선언, bean 태그를 사용하려면 spring-bean.xsd 파일이 있어야 한다. bean 태그는 beans태그 안에 사용하며 여러번 사용할 수 있다. bean 태그 속성에는 실제 클래스 파일 경로를 입력하고, id에는 보통 클래스명의 소문자 형태를 입력한다.

다른 클래스나 인터페이스를 멤버 변수로 가지고 있는 경우에는 property 태그를 사용해 명시하고, workManager처럼 구현 타입이 구체화되지 않은 인터페이스인 경우는 ref 태그를 사용해 명시할 수 있다.

이제 XML로 정의한 스프링 설정을 사용하는 클래스를 만든다.

GenericXmlApplicationContext 생성자 파라미터로 applicationContext.xml 파일을 전달하고 Resources에 있는 파일은 classpath: 로 표기할 수 있다. resources파일 밑에 하위 폴더가 있는경우 '/'를 사용해 구분한다.

GenericXmlApplicationContext의 인스턴스를 생성한 후 getBean 메소드를 사용시 XML에 설정한 id값과 클래스명을 입력한다.


* 스프링이 클래스들의 인스턴스화(의존성 주입)을 대신 해주므로 클래스들을 new 연산자로 생성하지 않아도 동일한 결과를 얻을 수 있다.


3.2.2.3 XML 설정 시 빈 생명주기 제어

스프링이 인스턴스 관리를 해줘서 편하지만, 생성 여부와 소멸 여부를 직접 파악하기 어렵다. 그래서 스프링에서 객체를 빈으로

등록하거나 제거할 때 콜백 메서드를 등록할 수 있는 방법을 제공한다.

  • init-method, destroy-method
스프링으로 클래스가 초기화되면 호출될 메소드를 추가한 후
xml에 init-method="메소드명"의 형식으로 추가해준다.

마찬가지로 소멸메소드는 destroy-method, onDestroyed 메소드를 추가한 후 destroy-method="메소드명" 형식으로 추가한다.


3.2.3 스프링 JavaConfig 설정

자바 5 이상에서는 XML을 사용하지 않고 자바 코드만으로 스프링 컨테이너를 설정할 수 있어 더 간편하다.


3.2.3.1 @Configuration을 이용한 설정

applicationContext.xml에 있던 내용을 자바설정으로 바꿔보겠다.

@Configuration 어노테이션을 클래스 상단에 추가해 이 클래스가 빈 설정 정보가 포함된 클래스임을 명시한다.

bean id 태그로 등록한 부분은 @Bean 어노테이션과 메소드를 이용해 대체한다.

WorkService처럼 같은 타입을 가진 클래스를 빈으로 등록할 때는 반환 타입을 WorkService로 같게 하고 메소드 내부에 구체화할

클래스의 인스턴스를 생성한 뒤 리턴하면 빈 컨테이너에서 사용할 때 각 메소드 이름을 빈 이름으로 조회해서 사용할 수 있다.

@Bean 어노테이션으로 클래스들을 빈으로 등록한 경우 AnnotationConfigApplicationContext를 사용해서 로드할 수 있다.

AnnotationConfigApplicationContext 인스턴스를 생성한 뒤 빈 설정 파일인 BeanConfig 클래스파일을 등록하고

context를 리프레쉬 해준다. 그 뒤에는 XML 설정과 동일하게 getBean 메소드를 사용해 등록된 클래스를 사용한다.

두 방법모두 출력값이 같은 것을 볼 수 있다.


3.2.3.2 @import 어노테이션 사용

설정해야 할 내용이 많은 경우 설정 내용을 파일별로 분리하고 Import 어노테이션을 사용해 적용할 수 있다.

다른 클래스에 새로 Company라는 클래스를 만들고 CompanyConfig파일에 @bean설정을 해준 후

BeanConfig 클래스에 @Import(CompanyConfig.class)를 추가해준 후 ConfigImportSpringApp파일에 파라미터를 생성해준다.

+ @Import(CompanyConfig.class)

그 결과 추가된 모습을 확인할 수 있다.


3.2.3.3 어노테이션 설정 시 생명주기 제어

어노테이션을 설정했을 때도 XML의 init,destroy 메소드처럼 생명주기를 제어할 수 있다.

여기서는 @PostConstruct, @PreDestroy 어노테이션을 사용하고 사용방법은 같다. 

'Spring Boot > 스프링 부트로 배우는 자바 웹 개발' 카테고리의 다른 글

1) SpringBoot & Gradle 프로젝트 생성하기 "HelloWorld"  (0) 2018.10.30
스프링 MVC  (0) 2018.07.27
세션  (0) 2018.07.12
필터와 쿠키  (0) 2018.07.12
서블릿 활용  (0) 2018.07.11

댓글