반응형
스프링 빈 등록방법1 - 직접 등록
@Configuration + @Bean
직접 스프링 빈으로 등록한 객체는 스프링이 관리하지 않는다.
- 구성 정보(XML or Config.class)를 넣어서 스프링 컨테이너(ApplicationContext) 생성
- 스프링 빈 등록 : 스프링 컨테이너는 파라미터로 넘어온 설정 클래스 정보를 사용해서 스프링 빈을 등록한다
- 빈 이름은 대개 메소드 이름을 사용한다.
스프링 빈 등록 방법2 - 자동 등록
@Component (@Repository, @Service, @Controller) + @Autowired
구성 정보 없이 컴포넌트 스캔만을 이용하여 빈을 등록하는 방법
- @Component가 포함되어있는 어노테이션을 이용해 스프링 빈으로 등록함
- 의존 관계 주입을 위해 @Autowired 어노테이션 이용함 (의존관계 주입의 종류가 다양하나 생성자 주입을 권장함)
@Configuration
- 구성 클래스임을 표시하는 어노테이션
- @Bean 어노테이션을 사용하고있는 메소드를 빈으로 등록야함을 알려줌
@Bean
@Bean 어노테이션이 붙은 메소드가 반환하는 객체를 스프링 빈으로 등록하라는 의미
@Component
- 스프링 프레임 워크에서 컴포넌트 스캔과 의존성 주입을 위해 사용되는 어노테이션
- 해당 클래스가 Bean으로 등록되어야 함을 나타냄
- @Repository, @Service, @Controller 어노테이션들의 상위 개념
- @Component 어노테이션을 상스프링이 자동으로 관리하고, 의존성 주입을 수행할 수 있음
@Controller
- 컨트롤러 클래스임을 나타내는 어노테이션
- @Component 어노테이션 기능을 포함하고 있음
- 일반적으로 org.springframework.web.bind.annotation.RequestMapping 어노테이션을 기반으로 하는 어노테이션 처리기 메소드와 함께 사용됨
- 결론 : 컨트롤러 클래스임을 명시하고, @Component 어노테이션 기능을 포함하고 있기 때문에 해당 클래스를 Bean으로 등록하며, 일반적으로 @RequestMapping 어노테이션을 지닌 메소드를 가지고있다.
- → 따라서 클래스에 @Component + @RequestMapping(””) 두개의 어노테이션을 동시에 적용시키면 @Controller 어노테이션과 같은 의미가 된다.
@RequestParam
- 해당 매개변수에 웹 요청의 파라미터 값을 자동으로 바인딩함
- 파라미터의 이름과 매개변수의 이름을 일치시키는 것이 일반적임
- required 라는 속성이 있는데 파라미터 필수 여부를 설정할 수 있음 (기본값 required=false)
- required=true로 설정하면 해당 파라미터가 전달되지 않을 시 예외가 발생함
- 매개변수의 이름과 파라미터의 이름이 동일한 경우 어노테이션 생략 가능
@ResponseBody
스프링에서 컨트롤러 메소드의 반환값을 HTTP 응답의 본문으로 사용하도록 지정하는 어노테이션
기본타입 응답일 경우
문자타입이 아닌 다른 타입일지라도 문자열로 변환되어 전송됨
@GetMapping("/count")
@ResponseBody
public int getCount() {
return 10;
}
//위 코드의 HTTP 응답 본문
HTTP/1.1 200 OK
Content-Type: text/plain
10
JSON 형식(객체) 응답일 경우
@GetMapping("/users/{id}")
@ResponseBody
public User getUserById(@PathVariable("id") Long userId) {
// userId 값을 사용하여 사용자 정보를 조회
// ...
return user; //반환값을 HTTP 응답의 본문으로 사용
//위 코드의 HTTP 응답 본문
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 123,
"name": "John Doe",
"email": "johndoe@example.com"
}
[참고]
@Documented : Javadocs에 이 Annotation이 있는가
@Retention : Annotation이 필요한가. 즉, Annotation이 유지될 기간을 의미한다. Indexed는 RUNTIME으로 설정되어있다. 이것 외에 SOURCE(Compile Time때 버려진다. 그래서 ByteCode에는 포함이 안된다.), CLASS(class load때 버려진다. bytecode-level post-processing 때 유용하다. 놀랍게도 이 설정이 기본값이다.)가 있다.
@Target : Annotation이 위치할 수 있는 곳이다. 따로 설정하지 않으면 어디든 위치할 수 있다.
반응형
'Back-End > Spring Boot' 카테고리의 다른 글
취업 준비, 스프링 부트 강의 (0) | 2023.07.31 |
---|---|
예습) 스프링 입문 (0) | 2023.05.11 |
예습)스프링 입문 (0) | 2023.05.11 |
댓글