자바에서 어노테이션(Annotation)이란 주석을 의미한다.
스프링 프레임워크 기반의 작업을 많이 하는 개발자라면 자주 사용하는 것인데, 소스코드에 추가해서 사용할 수 있는 메타 데이터의 일종이라고 볼 수 있다.
어노테이션의 특징은 아래와 같다
- 작성 문법 에러 체크하도록 정보 제공
- 배포 시 코드 자동 생성 할 수 있도록 제공
- 런타임에 특정 기능 실행 정보 제공
MVC란? 소프트웨어가 서비스하는 방식에 대한 패턴을 지칭. 어떤 프로임워크나 라이브러리를 지칭하는 것이 아니며, 서비스하는 방식에 대한 하나의 아이디어 디자인 패턴이다.
package hello.hellospring.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; @Controller public class HelloController { ... }
사용자의 요청이 진입하는 시점 : @Controller
요청에 따라 어떤 처리를 할지 결정해주는 역할 : 일종의 역할분담
import org.springframework.stereotype.Service; @Service public class MemberService { ... }
비즈니스 로직을 다음 Service Class임을 명시하는 어노테이션이다.
다른 어노테이션과 다르게 @Component에 추가된 기능이 없다.
나중에 추가적인 핸들링(handling)을 해줄 수도 있으니 비즈니스 로직에는 해당 어노테이션을 사용하는 것이 좋다!
@Repository public class MemberMemoryRepository implements MemberRepository { ... }
DAO에 특화된 어노테이션으로 @Component 어노테이션을 써도 상관없다.
@GetMapping("hello-string") @ResponseBody public String helloString(@RequestParam("name") String name, Model model){ return "hello " + name; //"hello spring" }
@ResponseBody는 Body 내용으로 매핑.
public String age(@RequestBody String req) { System.out.println(req); } // System.out -> name=yeon&age=27
@RequsetBody는 HTTP 요청의 본문 body부분이 자바 객체 그대로 전달.
@RequestParam
public String helloMvc(@RequestParam(name = "name", required = true) String name, Model model){ model.addAttribute("name", name); return "hello-template.html"; }
단일 요청 파라미터를 method 파라미터에 넣어주는 어노테이션이다.
@RequsetParam 어노테이션의 기본값으로 지정해주면 된다.
@Autowired public MemberController(MemberService memberService){ this.memberService = memberService; }
의존성을 주입시키는 어노테이션이다.
의존 관계를 자동으로 설정해주며, Controller Class에서 DAO or Service에 관한 객체들을 주입시킬때 많이 사용한다.
비슷한 것으로는 @Inject가 있는데 @Autowired와 차이점은
@Autowired은 스프링 지원.
@Inject는 자바 지원.