Spring Annotation | JeongKeepsCalm

Spring Annotation

Spring Basic

  • @Configuration
    • 스프링 설정 정보에 사용되는 어노테이션으로 싱들톤을 보장한다.
  • @ComponentScan
    • @Component 가 붙은 모든 클래스를 스프링 빈으로 등록
  • @Component
    • Bean을 자동으로 등록하는데 사용
  • @Autowired
    • 의존 관계를 자동으로 주입해준다.
  • @Repository
    • 스프링 데이터 접근 계층으로 인식하고, 데이터 계층의 예외를 스프링 예외로 변환해준다.
  • @RequiredArgsConstructor
    • final이 붙은 필드를 모아서 생성자를 자동으로 만들어준다.
  • @AllArgsConstructor
    • 모든 멤버 변수를 인자로 받는 생성자를 자동으로 생성해준다.
  • @Qualifier / @Primary
    • 둘 다 같은 타입의 빈이 여러 개 있을 때, 어떤 빈을 주입할지 선택하는데 사용된다.
    • 우선순위: @Qualifier > @Primary
  • @PostConstruct
    • 빈이 생성되고 의존성 주입이 완료된 후에 자동으로 호출된다. 특정한 설정을 해야한다거나, DB에 초기 데이터를 채워야 하는 작업을 할 때 사용한다.
  • @PreDestroy
    • 스프링 빈의 생명주기가 끝나기 직전에 호출되는 메서드에 붙인다. 주로 리소스 해제 등을 위해 사용된다.



클래스 단위

  • @Controller
    • 반환값이 String 이면 뷰 이름으로 인식해서 뷰를 찾고 렌더링된다.
    • 내부에 @Component 애노테이션이 기재되어 있어 스프링 빈 등록이 되며 @ComponentScan 의 대상이 되어 사용 가능하다.
  • @RestController
    • 반환값으로 뷰를 찾는 것이 아니라, Http MessageBody 에 바로 입력한다. 따라서 실행 결과로 상태 메시지를 받을 수 있다.
    • 컨트롤러의 모든 메소드에 @ResponseBody가 적용되는 효과
    • Rest API(HTTP API)를 만들 때 사용하는 컨트롤러
  • @SLF4J
    • 스프링에서 제공하는 Logback 로깅 라이브러리를 사용할 수 있다.
  • @Data
    • @Getter , @Setter , @ToString , @EqualsAndHashCode , @RequiredArgsConstructor 를 자동으로 적용해준다.
  • @SpringBootTest
    • 스프링 부트 애플리케이션의 전체 컨텍스트를 로드하여 통합 테스트를 수행
    • 스프링 부트에서 제공하는 어노테이션으로 통합 테스트를 위한 환경을 설정한다.
    • @SpringBootApplication이나 @SpringBootConfiguration이 선언된 클래스를 찾아 그 위치부터 설정을 시작
    • 테스트 시 필요한 모든 빈(Bean)을 자동으로 등록하고, 애플리케이션의 프로퍼티 설정도 적용



메소드 단위

  • @ResponseBody
    • 뷰 조회를 무시하고 HTTP MessageBody 에 직접 반환 값을 입력한다.
  • @ResponseStatus(HttpStatus.OK)
    • 상태코드를 설정후 응답
  • @SuppressWarnings("unchecked")
    • 프로그래머가 보장하니 오류를 체크하지 않는다.
  • @ModelAttribute
    • public Map<String, String> @ModelAttribute(“abc”) {}
    • 컨트롤러 내 메소드 호출 시 해당 메소드에 담은 값이 model에 담긴다.
    • model.addAttribute(“abc”, 리턴하는 맵)
  • @Validated
    • 검증기를 실행하라는 어노테이션
    • WebDataBinder 에 등록한 검증기를 찾아서 실행
    • 스프링 전용 검증 어노테이션
    • 내부에 groups 라는 기능을 포함
  • @Valid
    • 자바 표준 검증 어노테이션
  • @Builder

  • @JsonCreator / @JsonProperty
    • @Builder를 사용할 때는 Jackson이 객체를 생성하기 위한 충분한 정보가 없다.
    • 따라서, Jackson이 객체를 올바르게 생성할 수 있도록 도와주는 추가 설정이 필요하다.
    • 역직렬화 생성자를 명시적으로 정의
    • 생성자 단위의 @Builder 어노테이션과 함께 사용할 때 유용



파라미터 내

  • @RequestParam
    • @RequestParam(“username”) String username
    • @RequestParam(required = false, defaultValue = “-1”) int age
      • 파라미터 이름으로 바인딩
      • request.getParameter(“username”);
  • @RequestHeader
    • @RequestHeader MultiValueMap<String, String> headerMap
    • 모든 HTTP 헤더를 MultiValueMap 형식으로 조회
  • @RequestHeader
    • @RequestHeader(“host”) String host
    • HTTP 헤더 내 host 정보를 조회
  • @CookieValue
    • @CookieValue(value = “myCookie”, required = false) String cookie
    • 특정 값의 쿠키 조회
  • @ModelAttribute
    • @ModelAttribute User user
    • 지정된 객체를 생성해주고 파라미터로 넘어온 값을 바인딩해준다.
    • @ModelAttribute(“hello”) Item item
    • model에 hello라는 이름으로 item을 set해준다(== model.addAttribute(“hello”, item))
    • @ModelAttribute Item item
    • ModelAttribute에 이름을 지정해주지 않으면 지정된 클래스의 첫글자만 소문자로 변경해서 모델에 속성을 - 등록한다.
    • (==model.addAttribute(“item”, item))
  • @RequestBody
    • HTTP 메시지 바디 정보를 편리하게 조회
  • @RequestParam, @ModelAttribute vs @RequestBody
    • @RequestParam, @ModelAttribute: 요청 파라미터를 조회하는 기능
    • @RequestBody: HTTP 메시지 바디를 직접 조회하는 기능
  • @CookieValue
    • 웹브라우저 쿠키 값을 편리하게 조회한다.
  • @SessionAttribute(name = SessionConst.LOGIN_MEMBER, required = false)
    • 세션에 담겨있는 값을 조회하여 사용한다.
    • == HttpServletRequest.getSession(false).getAttribute(SessionConst.LOGIN_MEMBER)