상세 컨텐츠

본문 제목

annotation-driven / component-scan / annotation-config 차이 정리

Spring/개념

by Chan.94 2022. 3. 28. 20:36

본문

반응형

오늘은 완벽한 이해없이 무턱대고(?) 사용하였던 설정에 대해 정리해보고자 한다.

XML

<!-- Annotation 활성화 -->
<mvc:annotation-driven/>
<!-- Component 패키지 지정 -->
<context:component-scan base-package="package-name"/>

Spring 설정파일을 보게되면 이렇게 선언된 부분을 볼수있을 것이다.

각 라인에 대해서 정리해보겠다.

 

context:annotation-config

  • ApplicationContext 안에 이미 등록된 Bean들의 Annotation을 활성화하기 위해 사용된다.

어딘가에 bean을 등록해놓으면 @Autowired와 @Qualifier Annotation을 해석해서 가져다 쓰겠다는 의미이다.

@Autowired와 @Qualifier 두 가지만 해결한다.
따라서, 위 태그를 사용하더라도 xml에 bean을 반드시 선언해야 한다.


context:component-scan 

 

<!-- Component 패키지 지정 -->
<context:component-scan base-package="package-name"/>​

 

  • 설정한 특정 패키지 안의 클래스들을 스캔하고, Annotation을 확인 후 bean 인스턴스를 생성한다.

      @Component, @Controller, @Service,@Repository,​ 등의 Annotation이 존재해야 bean을 생성할 수 있다.

  • @Autowired와 @Qualifier Annotation을 인식할 수 있다.
  • context:component-scan을 선언했다면 context:annotation-config를 선언할 필요가 없다.                              ( @Autowired와 @Qualifier를 인식할 수 있기 때문)
  • classPath에 Jackson이 있는 경우 JSON 쓰기 읽기를 지원 와 같은 작업 적용

자세한 내용은[Spring & Spring Boot/개념] - [Spring] component-scan 사용이유


mvc:annation-driven

<!-- Annotation 활성화 -->
<mvc:annotation-driven/>
  • Spring MVC 컴포넌트들을 디폴트 설정으로 활성화한다.
  • Spring MVC @Controller에 요청을 보내기 위해 필요한 HandlerMapping HandlerAdapter를 Bean으로 등록한다.
HandlerMapping : HTTP 요청정보를 이용해서 컨트롤러를 찾아주는 기능
                        즉, 요청 URL을 보고 어떤Controller가 처리할지 결정하는 역할
HandlerAdapter : HandlerMapping을 통해 찾은 컨트롤러를 직접 실행하는 기능을 수행
  • Bean을 생성하기 위해 xml 파일에 context:component-scan을 명시하면 <mvc:annotation-driven/>태그를 포함하지 않아도 MVC 어플리케이션은 작동한다.

 

MVC XML 네임스페이스

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:mvc="http://www.springframework.org/schema/mvc"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">

  <mvc:annotation-driven />
<beans>

MVC Java Config

@EnableWebMvc
@Configuration
public class WebConfig {
}

MVC Java config를 활성화 하려면 @Configuration 클래스중 하나에 @EnableWebMvc 어노테이션을 추가

 

default 설정

[MVC XML 네임스페이스 / MVC Java Config] 방법으로 앞서 설명한 RequestMappingHandlerMapping, RequestMappingHandlerAdapter외에 default 설정에 대한 내용이다.

  1. 데이터 바인딩에 사용한 JavaBeans PropertyEditors에 추가적으로 ConversionService 인스턴스를 통한 스프링 3 방식의 타입 변환.
  2. ConversionService로 @NumberFormat 어노테이션을 사용해서 숫자 필드의 포매팅을 지원한다
  3. 클래스패스에 Joda Time 1.3 이상의 버전이 있다면 @DateTimeFormat 어노테이션을 사용해서 Date, Calendar, Long, Joda Time 필드의 포매팅을 지원한다.
  4. 클래스패스에 JSR-303 프로바이더가 있으면 @Valid로 @Controller 입력의 유효성검사를 지원한다.
  5. HttpMessageConverter가 @RequestMapping나 @ExceptionHandler 메서드에서 @RequestBody 메서드 파라미터와 @ResponseBody 메서드 반환값을 지원한다.

다음은 mvc:annotation-driven로 설정되는 HttpMessageConverter의 전체 목록이다.

  • ByteArrayHttpMessageConverter는 바이트 배열을 변환한다.
  • StringHttpMessageConverter는 문자열을 변환한다.
  • ResourceHttpMessageConverter는 모든 미디어 타입의 org.springframework.core.io.Resource를 변환한다.
  • SourceHttpMessageConverter는 javax.xml.transform.Source를 변환한다.
  • FormHttpMessageConverter는 폼 데이터를 MultiValueMap<String, String>로 변환하거나 그 반대로 변환한다.
  • Jaxb2RootElementHttpMessageConverter는 자바 객체를 XML로(혹은 그 반대로) 변환한다. (클래스패스에 JAXB2가 있는 경우 추가된다.)
  • MappingJacksonHttpMessageConverter는 JSON을 변환한다.(클래스패스에 Jackson이 있는 경우 추가된다.)
  • AtomFeedHttpMessageConverter는 Atom 피드를 변환한다. (클래스패스에 Rome이 있는 경우 추가된다.)
  • RssChannelHttpMessageConverter는 RSS 피드를 변환한다. (클래스패스에 Rome이 있는 경우 추가된다.)
반응형

관련글 더보기

댓글 영역

>