티스토리 뷰

JAVA/Spring

Spring 04 - Annotation

쟌쥰 2020. 3. 18. 20:15

포스팅에 앞서...

이 포스팅은 Spring Framework 를 이용한 Java 코드 위주의 설명입니다.

 

관련 코드는 아래 링크를 통해 깃허브에서 받아보실 수 있습니다.

 

https://github.com/ChoHyeonJunn/Workspace_Spring

 

ChoHyeonJunn/Workspace_Spring

Contribute to ChoHyeonJunn/Workspace_Spring development by creating an account on GitHub.

github.com


Spring Annotation

 

  • 어노테이션은 자바 1.5부터 지원한다.
  • 스프링은 어노테이션을 이용하여 빈과 관련된 정보를 설정할 수 있다.

 


Spring Framework에서 annotation을 사용하려면 다음과 같은 설정들을 필요로 한다.

 

  1. CommonAnnoatationBeanPostProcessor 클래스를 설정파일에 bean 객체로 등록하여 annotation 적용
    • <bean class="org.springframework.beans.factory.annotation.CommonAnnotationBeanPostProcessor"/>
  2. 태그를 이용
    • @Autowired, @Required, @Resource, @PostConstructor, @PreDestroy 등의 annotation을 자동 처리해주는 bean post processor
  3. 태그를 이용
    • @Component, @Controller, @Service, @Repository 등의 annotation을 자동 처리
  4. 태그를 이용
    • @RequestMapping, @Valid 등 spring mvc component 들을 자동 처
    • HandlerMapping, HandlerAdapter 를 등록하여 @Controller에 요청 연결.
    • 해당 설정이 없어도 component-scan이 있으면 mvc application 이 동작한다.

 


Spring WEB MVC Framework는 java 1.5부터 annotation을 제공하며, annotation의 사용으로 설정파일을 간결화하고, view 페이지와 객체 또는 메서드의 매핑을 명확하게 할 수 있다.

 

  • 4개의 stereotype annotation (component-scan에 의해 자동으로 등록)
    • @Component : stereotype annotation의 조상
    • @Controller : Spring MVC에서 컨트롤러로 인식
    • @Service : 역할 부여 없이 스캔 대상이 됨. 비즈니스 클래스(Biz) 에 사용
    • @Repository : 일반적으로 dao에 사용되며, Exception을 DataAccessException으로 변환
  1. @Component
    • 패키지 : org.springframework.stereotype
    • 버전 : spring 2.5
    • 클래스에 선언하며 해당 클래스를 자동으로 bean 등록, bean의 이름은 해당 클래스명으로 선언된다. (첫 글자는 소문자)
    • 범위는 디폴트로 singleton이며 @Scope를 이용해 지정할 수 있다.
  2. @Autowired
    1. 패키지 : org.springframework.beans.factory.annotation
    2. 버전 : spring 2.5
    3. Autowired annotation은 spring에서 의존관계를 자동으로 설정할 때 사용한다.
    4. 이 어노테이션은 생성자, 빌드, 메서드, 세 곳에 적용이 가능하며 타입을 이용한 프로퍼티 자동 설정 기능을 제공한다.
    5. 즉, 해당 타입의 빈 객체가 없거나 2개 이상일 경우 예외를 발생시킨다. 
    6. 프로퍼티 설정 메서드 (setter) 형식이 아닌 일반 메서드에도 적용이 가능하고, 프로퍼티 설정이 필수가 아닐 경우 @Autowired(required=false)로 선언한다. (기본값 = true)
    7. byType으로 의존관계를 자동으로 설정할 경우 같은 타입의 빈이 2개 이상 존재하게 되면 예외가 발생하는데, Autowired도 같은 문제가 발생한다.
    8. 이럴 때 @Qualifier를 사용하면 동일한 타입의 빈 중 특정 빈을 사용하도록 하여 문제를 해결할 수 있다.
    9. ex)  @Autowired @Qualifier("test") private Test test; @Qualifier 

패키지 : org.springframework.beans.factory.annotation
버전 : spring 2.5
@Autowired annotation이 타입 기반이기 때문에 2개 이상의 동일타입 진 객체가 존재할 시 특정 빈을 사용하도록 선언한다.
@Qualifier("beanName") 의 형태로 @Autowired와 같이 사용하며 메서드에서 두 개 이상의 파라미터를 사용할 경우에는 파라미터 앞에 선언해야 한다.

4. @Required
패키지 : org.springframework.factory.annotation
버전 : spring 2.5
필수 프로퍼티임을 명시하는 것으로, 프로퍼티 설정 메서드 (setter)에 붙이면 된다.
필수 프로퍼티를 설정하지 않을 경우 빈 생성시 예외를 발생시킨다.

5. @Repository
패키지 : org.springframework.stereotype
버전 : spring 2.0
dao에 사용되며 Exception을 DataAccessException으로 변환한다.

6. @Service
패키지 : org.springframework.stereotype
버전 : spring 2.0
@Service를 적용한 class는 비즈니스 로직(biz)으로 등록이 된다.

7. @Resource
패키지 : javax.annotation.Resource
버전 : java 1.6 & jee5
어플리케이션에서 필요로 하는 자원을 자동 연결할 때 사용한다.
name 속성에 자동으로 연결될 빈 객체의 이름을 입력한다.
@Source(name="testDao")

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
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 29 30 31
글 보관함