Annotation은 클래스와 메서드에 추가하여 다양한 기능을 부여하는 역할을 한다.
Annotation을 활용하여 Spring Framework는 해당 클래스가 어떤 역할인지 정하기도 하고, Bean을 주입하기도 하며, 자동으로 getter나 setter를 생성하기도 한다.
이러한 Annotation을 통하여 코드량이 감소하고 유지보수하기 쉬우며, 생산성이 증가된다.
개발자가 생성한 Class를 Spring의 Bean으로 등록할 때 사용하는 Annotation이다. Spring은 해당 Annotation을 보고 Spring의 Bean으로 등록한다.
@Component(value="myman")
public class Man {
public Man() {
System.out.println("hi");
}
}
Spring Framework에서는 @Component, @Service, @Repository, @Controller, @Configuration 중 1개라도 등록된 클래스를 찾으면, Context에 bean으로 등록한다. @ComponentScan Annotation이 있는 클래스의 하위 Bean을 등록될 클래스들을 스캔하여 Bean으로 등록해준다.
@Bean Annotation은 개발자가 제어 불가능한 외부 라이브러리와 같은 것들을 Bean으로 만들 때 사용한다.
Spring에게 해당 Class가 Controller의 역할을 한다고 명시하기 위해 사용한다.
@RequestMapping(value = "")와 같은 형태로 작성하며, 요청이 들어온 URI의 요청과 Annotation value 값이 일치하면 해당 클래스나 메소드가 실행된다. Controller 객체 안의 메서드와 클래스에 적용 가능하며, 다음과 같이 사용한다.
@Controller // 이 Class는 Controller 역할을 한다.
@RequestMapping("/user") // 이 Class는 /user로 들어오는 요청을 모두 처리한다.
public class UserController {
@RequestMapping(method = RequestMethod.GET))
public String getUser(Model model) {
// GET method, /user 요청을 처리
}
@RequestMapping(method = RequestMethod.POST)
public String addUser(Model model) {
// POST method, /user 요청을 처리
}
@RequestMaping(value="/info", method = RequestMethod.GET)
public String addUser(Model model) {
// GET method, /user/info 요청을 처리
}
}
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping(method = RequestMethod.POST)
public String addUser(@RequestBody User user) {
// POST method, /user 요청을 처리
String sub_name = user.name;
String sub_old = user.old;
}
}
Bean 객체를 주입받기 위한 방법:
- @Autowired
- 생성자 (@AllArgsConstructor 사용)
- setter
RequestMapping(Method=RequestMethod.GET)과 똑같은 역할을 한다.
@Controller // 이 Class는 Controller 역할을 한다.
@RequestMapping("/user") // 이 Class는 /user로 들어오는 요청을 모두 처리한다.
public class UserController {
@GetMapping("/")
public String getUser(Model model) {
// GET method, /user 요청을 처리
}
////////////////////
// 위와 아래 메소드는 동일하게 동작한다.
////////////////////
@RequestMapping(method = RequestMethod.GET)
public String getUser(Model model) {
// GET method, /user 요청을 처리
}
}
RequestMapping(Method=RequestMethod.POST)와 똑같은 역할을 한다.
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping(method = RequestMethod.POST)
public String addUser(Model model) {
// POST method, /user 요청을 처리
}
////////////////////
// 위와 아래 메소드는 동일하게 동작한다.
////////////////////
@PostMapping('/')
public String addUser(Model model) {
// POST method, /user 요청을 처리
}
}