Spring Framework

Spring Framework-어노테이션 기반 설정

Kimjoy 2023. 8. 17. 23:14

대부분의 프레임워크가 그렇듯이 스프링 프레임워크 역시 XML 설정이 매우 중요하다. 그만큼 XML 파일의 과도한 설정에 대한 부담도 크며, 이로 인해 프레임워크 사용을 꺼리기도 한다. 따라서 대부분 프레임워크는 어노테이션을 이용한 설정을 지원하고 있다. 

1. context 네임스페이스 추가

2. 컴포넌트 스캔(component-scan) 설정

3. @Component

 

context 네임스페이스 추가

어노테이션 설정을 추가하려면 스프링 설정 파일의 루트 엘리먼트인 <beans>에 context 관련 네임스페이스와 스키마 문서의 위치를 등록해야 한다. 이는 p 네임스페이스를 추가했을 때처럼 [Namespaces] 탭을 선택하고 'context' 항목만 체크하면 간단하게 추가할 수 있다. 

 

컴포넌트 스캔(component-scan) 설정

스프링 설정 파일에 애플리케이션에서 사용할 객체들을 <bean> 등록하지 않고 자동으로 생성하려면 <context:component-scan />이라는 엘리먼트를 정의해야 한다. 이 설정을 추가하면 스프링 컨테이너는 클래스 패스에 있는 클래스들을 스캔하여 @Component가 설정된 클래스들을 자동으로 객체 생성한다. 

 <context:component-scan /> 설정을 제외한 나머지 <bean> 설정은 모두 삭제하거나 주석으로 처리하면 된다. 여기서 중요한 것은  <context:component-scan /> 엘리먼트의 base-package 속성인데 만약 속성값을 "com.spring.polymorphism" 형태로 지정하면 com.spring.polymorphism 패키지로 시작하는 모든 패키지를 스캔 대상에 포함한다. 따라서 다음과 같은 모든 패키지의 클래스들이 스캔 대상이 된다.

 

@Component

 <context:component-scan />을 설정했으면 이제 스프링 설정 파일에 클래스들을 일일이 <bean> 엘리먼트로 등록할 필요가 없다. @Component만 클래스 선언부 위에 설정하면 끝난다. 해당 클래스에 기본 생성자가 있어야만 컨테이너가 객체를 생성할 수 있고, 클라이언트가 스프링 컨테이너가 생성한 객체를 요청하려면 요청할 때 사용할 아이디나 이름이 반드시 설정되어 있어야 한다. 이렇게 설정했다면 클래스의 객체가 메모리에 생성되는 것은 문제 없다.

클래스 선언부에 @Component를 설정해 줌으로써 스프링 컨테이너는 해당 클래스를 bean으로 생성하고 관리한다.