본문 바로가기
Web developer/Spring

[Spring] Annotation @정리2

by doongjun 2021. 4. 18.

2021.04.18 - [WEB developer/Spring] - [Spring] Annotation @정리1

 

[Spring] Annotation @정리1

Spring에 대해 공부하면서 annotation이 계속 생소했다. 다양한 annotation에 대해 앞으로 계속 정리해보려고 한다. Annotation이란? 어노테이션은 xml 설정이 너무 길어짐에 따라 그 대안으로 나타났다. 어

doongjun.tistory.com

이전 포스팅에 이어 다양한 어노테이션들을 정리해보려 한다. 


@Component

  • component-scan을 선언에 의해 특정 패키지안의 클래스들을 스캔하고, @Component 어노테이션이 있는 클래스에 대해 bean 인스턴스를 생성한다.

 

@Controller, @Service, @Repository

  • @Component ----구체화-----> @Controller, @Service, @Repository
  • Bean으로 등록
  • 해당 클래스가 Controller, Service, Repository로 사용됨을 스프링에 알린다.

@RequestMapping

@Controller
@RequestMapping("/home") // 1) Class Level
public class HomeController {
    /* an HTTP GET for /home */ 
    @RequestMapping(method = RequestMethod.GET) // 2) Handler Level
    public String getAllEmployees(Model model) {
        ...
    }
    /* an HTTP POST for /home/employees */ 
    @RequestMapping(value = "/employees", method = RequestMethod.POST) 
    public String addEmployee(Employee employee) {
        ...
    }
}
  • Class Level Mapping
    • 모든 메서드에 적용되는 경우
    • "/home"으로 들어오는 모든 요청에 대한 처리를 해당 클래스에서 한다는 것을 의미
  • Handler Level Mapping
    • 요청 url에 대해 해당 메서드에서 처리해야 되는 경우
    • "/home/employees" POST요청에 대한 처리를 addEmployee()에서 한다는 것을 의미
  • value : 해당 url로 요청이 들어오면 이 메서드가 수행
  • method : 요청 method를 명시, 없으면 모든 http method 형식에 대해 수행

@RestController

  • @Controller + @ResponseBody 
  • @ResponseBody를 모든 메소드에서 적용한다
    •  매소드의 반환결과(문자열)를 json 형태로 반환한다.
  • @Controller와 @RestController의 차이
    • Controller
      1. API와 view를 동시에 사용하는 경우 사용
      2. 대신 API 서비스로 사용하는 경우는 @ResponseBody를 사용하여 객체를 반환
      3. view return이 주 목적
    • @RestController
      1. view가 필요없는 API만 지원하는 서비스에서 사용
      2. @RequestMapping 메서드가 기본적으로 @ResponseBody 의미를 가정한다.
      3. data(json, xml 등) return이 주목적
      4. 즉, @RestController = @Controller + @ResponseBody

@Required

  • setter method에 사용
  • 영향을 받는 bean 구성 시 xml 설정 파일에 반드시 property를 채워야 함
<!-- Definition for student bean -->
<bean id = "student" class = "com.tutorialspoint.Student">
    <property name = "name" value = "Zara" />
    <property name = "age"  value = "11"/>
</bean>

@Autowired

  • Type에 따라 알아서 Bean 주입
  • 필드, 생성자, 입력 파라미터가 여러 개인 메소드(@Qualifier는 메소드의 파라미터)에 적용 가능
  • Type을 먼저 확인한 후 못찾으면 Name에 따라 주입

  • tip. bean을 주입받는 방식
    1. @Autowired
    2. setter
    3. 생성자(@AllArgsConstructor 사용)

@Qualifier

  • 같은 타입의 빈이 두 개 이상이 존재하는 경우에 스프링이 어떤 빈을 주입해야 할지 알 수 없어서 스프링 컨테이너를 초기화하는 과정에서 예외를 발생시킨다.
  • 이 경우 @Qualifier을 @Autowired와 함께 사용하여 정확히 어떤 bean을 사용할 지 지정하여 특정 의존 객체를 주입할 수 있도록 함

  1. xml 설정에서 bean의 한정자 값(qualifier value)을 설정
  2. @Autowired 어노테이션이 적용된 주입 대상에 @Qualifier 어노테이션 설정

@Resource

  • 어노테이션 사용으로 인해 특정 framework에 종속적인 어플리케이션을 구성하지 않기 위해 @Resource를 사용할 것을 권장
  • 필드, 입력 파라미터가 한 개인 bean property setter method에 적용 가능

출처:

gmlwjd9405.github.io/2018/12/02/spring-annotation-types.html

 

[Spring] Spring Annotation의 종류와 그 역할 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

 

'Web developer > Spring' 카테고리의 다른 글

[Spring] Swagger를 사용하여 Web API 문서화 해보기  (0) 2021.08.02
[Spring] IoC & DI  (0) 2021.07.27
[Spring] Annotation @정리1  (0) 2021.04.18
[Spring] DAO와 Mapper의 차이  (0) 2021.04.18
[Spring] MVC Model 2  (0) 2021.04.18

댓글