본문 바로가기
Back-End/Spring Boot

Spring Boot

by newny 2023. 5. 22.
반응형

스프링 빈 등록방법1 - 직접 등록

@Configuration + @Bean

직접 스프링 빈으로 등록한 객체는 스프링이 관리하지 않는다.

  1. 구성 정보(XML or Config.class)를 넣어서 스프링 컨테이너(ApplicationContext) 생성
  2. 스프링 빈 등록 : 스프링 컨테이너는 파라미터로 넘어온 설정 클래스 정보를 사용해서 스프링 빈을 등록한다
  3. 빈 이름은 대개 메소드 이름을 사용한다.

스프링 빈 등록 방법2 - 자동 등록

@Component (@Repository, @Service, @Controller) + @Autowired

구성 정보 없이 컴포넌트 스캔만을 이용하여 빈을 등록하는 방법

  1. @Component가 포함되어있는 어노테이션을 이용해 스프링 빈으로 등록함
  2. 의존 관계 주입을 위해 @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

댓글