Fairy ' s
[Spring] Annotation 본문
Spring Bean
- Spring IOC(Inversion Of Control) 컨테이너가 관리하는 자바 객체
- IOC : 사용자가 제어권을 다른 주체에게 넘기는 것을 말한다.
이것이 뜻하는 것은 일반 자바 프로그램에서 각 객체들이 프로그램의 흐름을 결정하고 각 객체를 직접 생성하고 조작하는 작업으로 호출했고, 모든 작업을 사용자가 제어하는 구조였다. IOC가 적용된 경우 객체의 생성을 특별한 관리 위임 주체에게 맡긴다. 이 경우 사용자는 객체를 직접 생성하지 않고 객체의 생명주기를 컨트롤하는 주체는 다른 주체가 된다. - Spring Bean을 Spring IOC Container에 등록하기 위해서는 자바 어노테이션을 등록하거나 Bean Configuration 파일에 직접 Bean을 등록할 수 있다.
Annotation
- 자바 소스 코드에 추가하여 사용할 수 있는 메타데이터의 일종으로, 단순 주석 기능이 아닌 특별한 기능을 사용할 수 있음
- 클래스와 메서드에 추가하여 해당 클래스가 어떤 역할인지 정하기도 하고, Bean을 주입하기도 하며, 다양한 역할을 수행함
Annotation 종류
- @Component : 생성한 Class를 Spring의 Bean으로 등록할 때 사용
@Component(value="myman")
public class Man {
}
- @ComponentScan : 이 어노테이션이 있는 클래스의 하위 Bean을 등록 될 클래스들을 스캔하여 Bean으로 등록해줌
- @Controller : Spring에게 해당 Class가 컨트롤러의 역할을 한다고 명시하기 위애 사용
- @RequestMapping : 요청 들어온 URI의 요청과 어노테이션 value 값이 일치하면 해당 클래스나 메소드가 실행되고, Class 단위에 사용하면 하위 메소드에 모두 적용된다. 또 메소드에 적용되면 해당 메소드에 지정한 방식으로 URI를 처리
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping(method = RequestMethod.GET)
public String getUser(Model model) {
}
}
- RequestHeader : Request의 header값을 가져올 수 있으며, 해당 어노테이션을 쓴 메소드의 파라미터에 사용
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping(method = RequestMethod.GET)
public String getUser(@RequestHeader(value="Accept-Language") String acceptLanguage) {
}
}
- @RequestParam : URL에 전달되는 파라미터를 메소드의 인자와 매칭시켜, 파라미터를 받아서 처리할 수 있고, Json 형식의 Body를 MessageConverter를 통해 Java 객체로 변환시킴
- @RequestBody : Body에 전달되는 데이터를 메소드의 인자와 매칭시켜, 데이터를 받아서 처리할 수 있고, 클라이언트가 Body에 보내는 HTTP 요청 본문(Json, XML 등)을 Java Object로 변환함
@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;
}
@RequestMapping(method = RequestMethod.GET)
public String getUser(@RequestParam String nickname, @RequestParam(name="old") String age {
String sub = nickname + "_" + age;
...
}
}
- @ModelAttribute : 클라이언트가 전송하는 HTTP 파라미터, Body 내용을 Setter 함수를 통해 1:1로 객체에 데이터를 연결(바인딩) 하고, HTTP Body 내용은 multipart/form-data 형태를 요구하며 json을 받아 처리할 수 없음
- @ResponseBody : 메소드에서 리턴되는 값이 View 로 출력되지 않고 HTTP Response Body에 직접 쓰여지며, return 시에 json, xml과 같은 데이터를 return 함
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public String getUser(@RequestParam String nickname, @RequestParam(name="old") String age {
User user = new User();
user.setName(nickname);
user.setAge(age);
return user;
}
}
- @Autowired : Bean을 주입받기 위해 사용
- @GetMapping : @RequestMapping과 같은 역할을 하며 아래와 같이 사용함
- @PostMapping : @RequestMapping과 같은 역할을 하며 아래와 같이 사용함
@Controller
@RequestMapping("/user")
public class UserController {
@GetMapping("/")
public String getUser(Model model) {
}
@RequestMapping(method = RequestMethod.GET)
public String getUser(Model model) {
}
public String addUser(Model model) {
}
@PostMapping('/')
public String addUser(Model model) {
}
}
- @SpringBootTest : Spring Boot Test에 필요한 의존성 제공
package com.example.demo;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class DemoApplicationTests {
@Test
void contextLoads() {
}
}
- @Test : JUnit에서 테스트할 대상 표시
Lombok의 Annotation
- Lombok : Java 라이브러리로 반복되는 getter, setter, toString 등의 메소드 작성 코드를 줄여주는 다이어트 라이브러리
- @Setter : Class 모든 필드의 Setter 메소드를 생성
- @Getter : Class 모든 필드의 Getter 메소드를 생성
- @AllArgsConstructor : Class 모든 필드 값을 파라미터로 받는 생성자 추가
- @NoArgsConstructor : Class 기본 생성자를 자동으로 추가
- @ToString : Class 모든 필드의 toString 메소드를 생성
'Study > Spring' 카테고리의 다른 글
[Spring] 게시판 / 함수 & 개념 정리 #3 (0) | 2023.01.06 |
---|---|
[Spring] 개발 환경 구축 (0) | 2023.01.04 |
[Spring] 게시판 / 함수 & 개념 정리 #2 (0) | 2023.01.02 |
[Spring] 게시판 / 함수 & 개념 정리 #1 (0) | 2023.01.02 |
[Spring] 게시판 / 작동 순서 (0) | 2023.01.02 |
Comments