Spring Framework는 @Component, @Service, @Repository, @Controller, @Configuration 중 1개라도 등록된 클래스를 찾으면, Context에 bean으로 등록한다. @ComponentScan Annotation이 있는 클래스의 하위 Bean을 등록 될 클래스들을 스캔하여 Bean으로 등록한다.
@Bean
@Bean Annotation은 개발자가 제어가 불가능한 외부 라이브러리와 같은 것들을 Bean으로 만들 때 사용한다.
@Controller
Spring에게 해당 Class가 Controller의 역할을 한다고 명시하기 위해 사용한다.
@RequestHeader
Request의 header값을 가져올 수 있으며, 해당 Annotation을 쓴 메소드의 파라미터에 사용한다.
@RequestMapping
@RequestMapping(value=”“)와 같은 형태로 작성하며, 요청 들어온 URI의 요청과 Annotation value 값이 일치하면 해당 클래스나 메소드가 실행된다. Controller 객체 안의 메서드와 클래스에 적용 가능하며, value를 제외한 다른 옵션이 주어지지 않는다면 value는 생략 가능하다.
Class 단위에 사용하면 하위 메소드에 모두 적용된다.
메소드에 적용되면 해당 메소드에서 지정한 방식으로 URI를 처리한다.
@RequestParam
URL에 전달되는 파라미터를 메소드의 인자와 매칭시켜, 파라미터를 받아서 처리할 수 있는 Annotation으로 아래와 같이 사용한다. Json 형식의 Body를 MessageConverter를 통해 Java 객체로 변환시킨다.
@RequestBody
Body에 전달되는 데이터를 메소드의 인자와 매칭시켜, 데이터를 받아서 처리할 수 있는 Annotation으로 아래와 같이 사용한다. 클라이언트가 보내는 HTTP 요청 본문(JSON 및 XML 등)을 Java 오브젝트로 변환한다.
클라이언트가 body에 json or xml 과 같은 형태로 형태로 값(주로 객체)를 전송하면, 해당 내용을 Java Object로 변환합니다.
@ModelAttribute
클라이언트가 전송하는 HTTP parameter, Body 내용을 Setter 함수를 통해 1:1로 객체에 데이터를 연결(바인딩)한다. RequestBody와 다르게 HTTP Body 내용은 multipart/form-data 형태를 요구한다. @RequestBody가 json을 받는 것과 달리 @ModelAttribute 의 경우에는 json을 받아 처리할 수 없다.
@ResponseBody
@ResponseBody은 메소드에서 리턴되는 값이 View 로 출력되지 않고 HTTP Response Body에 직접 쓰여지게 된다. return 시에 json, xml과 같은 데이터를 return 한다.
@Autowired
Spring Framework에서 Bean 객체를 주입받기 위한 방법은 크게 아래의 3가지가 있고 Spring Framework가 Class를 보고 Type에 맞게(Type을 먼저 확인 후, 없으면 Name 확인) Bean을 주입한다.
@Autowired
생성자 (@AllArgsConstructor 사용)
setter
@GetMapping
RequestMapping(Method=RequestMethod.GET)과 똑같은 역할을 한다.
@PostMapping
RequestMapping(Method=RequestMethod.POST)과 똑같은 역할을 한다.