어노테이션 Annotation
자바 어노테이션은 자바 소스 코드에 추가하여 사용할 수 있는 메타데이터의 일종이다. 보통 @ 기호를 앞에 붙여서 사용한다. 스프링은 어노테이션을 이용하여 Bean과 관련된 정보를 설정할 수 있다.
어노테이션 사용 설정 방법
- CommonsAnnotationBeanPostProcessor 클래스 설정파일에 bean객체로 등록하여 Annotation을 적용하는 방법
<bean class = "org.springframework.beans.factory.annotation.CommonAnnotationBeanPostProcessor"/>
- <context:annotation-config> 태그 사용
@Autowired, @Required, @PostConstructor, @PreDestory 등의 annotation을 자동 처리해준다.
<context:annotation-config>
- <context:component-scan base-package=""> 태그 사용
@Component, @Controller, @Service, @Repository 등의 annotation을 자동 처리해준다.
<context:component-scan base-package="">
- <mvc:annotation-driven> 태그 사용
@RequestMapping, @Valid등spring mvc component 등을 자동 처리해준다.
HandlerMapping, HandlerAdapter를 등록하여 @Controller에 요청 연결한다. 해당 설정이 없어도 component-scan이 있으면 mvc application 동작한다.
스테레오 타입 어노테이션 StreotypeAnnotaion
스테레오 타입 어노테이션은 <componet-scan>에 의해 자동으로 등록해주는 어노테이션이다.
- @Componet : 스테레오타입 어노테이션의 조상
- @Controller : Spring MVC에서 컨트롤러 역할
- @Service : 역할 부여 없이 스캔 대상. 비지니스 클래스(Biz)에서 사용
- @Repository : 일반적으로 dao에 사용되며 Exception DataAccessException으로 변환
어노테이션 종류
- @Component
- package : org.springframework.stereotype
- version : Spring 2.5
- 특징
- 클래스에 선언하며 해당 클래스를 자동으로 bean으로 등록한다.
- bean의 이름은 해당 클래스명이 사용된다. (첫글자는 소문자)
- 범위는 디폴트로 singleton이며 @Scope를 이용해 지정할 수 있다.
- @Autowired
- package : org.springframework.beans.factory.annotation
- version : Spring 2.5
- 특징
- Autowired 어노테이션은 spring에서 의존관계를 자동으로 설정할 때 사용한다.
- 이 어노테이션은 생성자, 필드, 메서드 세 곳에 적용이 가능하며 "타입"을 이용한 프로퍼티 자동 설정 기능을 제공한다. (해당 타입의 빈 객체가 없거나 2개 이상이 아닐 경우 발생)
- 프로퍼티 설정 메서드(setter) 형식이 아닌 일반 메서드에서도 적용이 가능하다.
- 프로퍼티 설정이 필수가 아닌 경우 @Autowired(required=false)로 선언한다.
- byType으로 의존관계를 자동으로 설정할 경우 같은 타입의 빈이 2개 이상 존재하게 되면 예외가 발생하는 데, @Autowired도 같은 문제가 발생한다. 이럴때 @Qualifier 어노테이션을 사용하면 동일한 타입의 빈 중특정 빈을 사용하도록 하여 해결이 가능하다.
- @Qualifier
- package : org.springframework.beans.factory.annotation
- version : spring 2.5
- 특징
- Autowired 어노테이션이 type기반이기 때문에 2개 이상의 동일 탕비 빈 객체가 존재할 시 특정 빈을 사용하도록 선언한다.
- @Qualifier("beanName")의 형태로 @Autowired와 같이 사용하며, 메서드에서 두 개 이상의 파라미터를 사용할 경우에는 파라미터 앞에 선언해야 한다.
- @Required
- package :org.springframework.beans.factory.annotation
- version : spring 2.9
- 특징
- 필수 프로퍼티임을 명시하는 것으로, 프로퍼티 설정 메서드(setter)에 붙이면 된다.
- 필수 프로퍼티를 설정하지 않은 경우 빈 생성 시 예외를 발생시킨다.
- @Repository
- package : org.springframework.stereotype
- version : spring 2.0
- 특징
- dao에 사용되며 Exception을 DataAccessException으로 변환한다.
- @Service
- package : org.springframework.stereotype
- version : spring 2.0
- 특징
- @Service를 적용한 클래스는 비지니스 로직(Biz)로 등록된다.
- @Resource
- package : javax.annotation.Resource
- version : java 1.6 & jee 5
- 특징
- 어플리케이션에서 필요로 하는 자원을 자동 연결할 때 사용한다.
- name 속성에 자동으로 연결될 빈 객체의 이름을 입력한다.
댓글