티스토리 뷰
스프링에서의 역할 분담, WebApplicationContext와 연관된 글.
그저 좋다는 말에..
한창 스프링을 배우기 시작할 무렵에 복잡한 XML 설정을 자바 애노테이션 기반으로 간단하게 하겠다고 의미도 모른 채 @Autowired, <context:annotation-config /> 같은 태그를 썼던 기억이 난다.
많은 고민 끝에 결과적으로 현재는 주로 <context:component-scan /> 태그를 사용하고 있고, 이 태그를 중심으로 이번 글을 써보려 한다.
이해하기 쉬운 코드로
<context:component-scan /> 태그는 설정 과정이
이해하기 쉬운 코드가 되기 위해선 연관이 있는 부분들이 가까워야 한다고 생각하는데, XML 방식으로 하다 보면 빼먹거나 중복되는 설정을 못 보고 지나칠 가능성이 높다.
반면에, @Component를 비롯한 @Repository, @Service, @Controller는 선언하고자 하는 Java 코드에 용도에 맞게 직관적으로 선언을 하기 때문에 알아보기에도, 코드를 이해하기에도 더욱 편하다.
위의 그림을 보면 각 애노테이션의 관계를 알 수 있는데, @Component가 포괄적인 선언이라면 @Repository, @Service, @Controller는 각각의 역할에 더욱 집중된 선언이다.
<context:component-scan /> 살펴보기
기본적인 사용법은 WebApplicationContext XML 파일에 아래와 같이 선언한다.
1 | <context:component-scan base-package="com.first" /> | cs |
base-package에 component-scan을 할 패키지 경로를 명시해주면 해당 경로를 포함한 모든 하위 경로에 적용되고, 애노테이션을 명시한 자바 파일들이 Bean으로 동록 되어 사용 가능해진다.
하나 더 나아가서, 지난 글에서 언급한 계층 관계 컨텍스트에도 적용해보도록 하자.
Servlet WebApplicationContext
1 2 3 4 | servlet-context.xml <context:component-scan base-package="com.first" use-default-filters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan> | cs |
앞서 Servlet WebApplicationContext에는 주로 View 자원을 구성한다고 하였는데, 쉽게 말해서 Controller에 관한 설정만 한다고 볼 수 있다.
위의 코드를 살펴보면 context:component-scan 태그에 use-default-filters 속성을 볼 수 있는데, 이름 그대로 해당 패키지에 기본 필터를 적용할지 여부를 설정하는 부분이다.
다음으로, 하위 태그를 살펴보면 context:include-filter 태그가 있는데 이는 context:component-scan에 설정된 기본 필터 이외에 필터를 추가하기 위한 설정 부분이다.
이를 통해 위의 코드를 다시 해석해보면, "com.first"에 해당하는 모든 하위 경로에 component-scan의 기본 필터를 제외하고 annotation 타입의 Controller 필터만 추가한다는 의미이다.
Root WebApplicationContext
1 2 3 4 | root-context.xml <context:component-scan base-package="com.first"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan> | cs |
Root WebApplicationContext에는 View 자원 이외의 자원들을 구성한다고 하였는데, 쉽게 말해서 Controller를 제외한 나머지 설정들을 한다고 볼 수 있다.
위의 코드를 살펴보면 context:component-scan 태그에 use-default-filters 속성의 기본값이 true이기 때문에 따로 명시하지 않아도 된다.
다음으로, 하위 태그를 살펴보면 context:exclude-filter 태그가 있는데 이는 context:component-scan에 포함된 기본 필터 중 특정한 필터를 제외하기 위한 설정 부분이다.
이를 통해 위의 코드를 다시 해석해보면, "com.first"에 해당하는 모든 하위 경로에 component-scan의 기본 필터를 사용하고 annotation 타입의 Controller 필터만 제외한다는 의미이다.
참조
'dev > java' 카테고리의 다른 글
처음 하는 스프링(Spring), Eclipse 환경 설정 (1) | 2018.06.12 |
---|---|
처음 하는 스프링(Spring), 개발 환경 구성하기 (1) | 2018.06.11 |
스프링에서의 역할 분담, WebApplicationContext (0) | 2018.03.30 |
프론트 컨트롤러 패턴, Front Controller Pattern (0) | 2018.03.28 |
개발 환경 구축하기 첫 번째, web.xml (1) | 2018.03.27 |
- Total
- Today
- Yesterday
- Tomcat
- Nasdaq
- spring
- MariaDB
- Java
- sbux
- mybatis
- 주식
- 설정
- 변수
- 스타벅스
- 스프링
- 쏠편한환전
- AFK아레나
- 블라디보스톡
- 내돈돌려줘
- 세번가요
- 꿈의숫자
- 루블
- JMT
- 화려해
- 커피프렌즈
- 교환코드
- 두번가요
- MVC
- 환전
- controller
- 자작냉우동
- 맛집
- 이클립스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |