프로그래밍/TIL

[TIL] Spring Annotation

코딩중독 2024. 1. 26. 11:47

Target : 어노테이션을 붙일 수 있는 위치

 

@Bean

  • Target : METHOD (메서드 레벨)
  • 개발자 본인이 직접 제어할 수 없는 Method에 사용한다.
  • 일반적으로 외부 라이브러리를 Bean으로 등록할 때 사용한다.

@Component

  • Target : TYPE (Class, Interface, enum 등 클래스 레벨)
  • 개발자가 직접 개발해서 제어할 수 있는 클래스를 Bean으로 등록할 때 사용한다.

@Controller

  • Bean으로 등록되어 View를 렌더링 해서 보여준다.
  • 핸들러메서드에서 ViewName을 반환한다.
    @RequestMapping("/home")
    public String index() {
        return "index";
    }
  • 뷰페이지에 데이터를 전달하기 위한 데이터바인딩은 Model, ModelAndView를 사용한다.
    @RequestMapping("/list")
    public String list(Model model) {    // 객체바인딩을 위한 Model
        var bookList = bookMapper.list();
        model.addAttribute("list", bookList);
        return "list";
    }
  • 데이터만 반환해야 하는 경우에는 @ResponseBody를 붙여서 사용한다.
    @RequestMapping("/rest")
    @ResponseBody
    public List<String> rest() {
        List<String> list = new ArrayList<>();
        list.add("자바");
        list.add("스프링");
        list.add("부트");
        return list;
    }

 

@RestController

  • Json형태의 데이터를 반환하는 Json 응답 컨트롤러이다.
  • @Controller 어노테이션에 @ResponseBody가 포함된 것과 동일하게 작동한다.
  • 일반적으로 Api를 개발할 때 사용한다. (Restful Service : GET, POST, PUT, DELETE)
@RequestMapping("/rest-api")
@RestController
public class RestApiController {

    @GetMapping("/test1")
    public UserDTO readUser() {
        return UserDTO.builder()
            .id(1)
            .userName("milk")
            .password("sdf1234")
            .build();
    }
}