본문 바로가기
Language/Java

[Spring] 어노테이션 Annotation

Writer mintparc 2020. 2. 19.

어노테이션 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 속성에 자동으로 연결될 빈 객체의 이름을 입력한다.

댓글