본문 바로가기

Back-End/Spring

Spring Annotation

  1. 스프링 컴포넌트 관련 
    •  @Component
      • 스프링이 관리할 객체(Bean)라는 표시
      • 개발자가 객체를 직접 생성하지 않아도, 스프링 컨테이너가 자동으로 생성하고 관리해 준다.
    • 확장된 @Component 애노테이션들
애노테이션 역할
@Controller 웹 요청 처리(HTML View 반환)
@RestController REST API 요청 처리(JSON 데이터 반환)
@Service 비지니스 로직을 처리
@Repository DB 접근 로직 처리
@Configuration 설정 관련 클래스

2. 애노테이션의 작동 방식을 이해하는 메타 애노테이션

  • @Target
    • 애노테이션을 적용할 위치를 제한한다.
      • TYPE : 클래스 / 인터페이스 / 열거형에 적용
      • METHOD : 메서드에 적용
      • FIELD : 필드에 적용
    • @Target(ElementType.METHOD)
  • @Retention
    • 애노테이션이 유지되는 기간을 정의
      • SOURCE : 컴파일 중에만 사용하고 사라짐
      • CLASS : 클래스 파일까지 유지되지만, 런타임에는 사용 불가
      • RUNTIME : 런타임에도 유지
    • @Retention(TetentionPlicy.RUNTIME)

3. 웹 요청 관련 애노테이션

  • @RequestMapping, @GetMapping, @PostMapping
  • @ResponseBody
    • 메서드에서 반환한 데이터를 HTTP 응답 본문에 직접 넣어준다.
    • @RestController는 @ResponseBody를 기본적으로 포함한다.

4. DI(의존성 주입) 관련 애노테이션

  • @Autowired
    • 스프링 컨테이너가 관리하는 Bean을 자동으로 주입해준다.
@Component
Public class MyService {
	public String serviceName() {
    	return "My Service";
    }
}

@Controller
public class MyController {
	
    @Autowired
    private MyService myService;
    
    @GetMapping("/service")
    public String getServiceName() {
    	return myService.serviceName();
    }
}
  • @Qualifier
    • 같은 타입의 Bean이 여러개 있을 때, 특정 Bean을 선택하도록 도와준다.
@Component("serviceA")
public class ServiceA {}

@Component("serviceB")
public class ServiceB {}

@Controller
public class MyController {

    @Autowired
    @Qualifier("serviceB")
    private ServiceB myService;
}
  • @Primary
    • 같은 타입의 Bean이 여러 개일 때, 기본적으로 선택될 Bean을 지정한다.

5. 기타 알아두면 좋은 애노테이션

  • @Configuration & @Bean
    • 스프링 설정 클래스를 정의하고, Bean을 등록한다.
  • @Value
    • application.properties 파일에서 값을 주입받는다.
(properties file)
my.config.value = Hello, Config!

(Java Class)
@Component
public class ConfigReader {

    @Value("${my.config.value}") 
    private String configValue; //Hello, Config!가 담겨있다!

    public String getConfigValue() {
        return configValue;
    }
}

 

'Back-End > Spring' 카테고리의 다른 글

IOC / DI  (0) 2024.12.06
Spring Container와 Spring Bean  (0) 2024.12.06
객체 지향 설계(SOLID 원칙)  (1) 2024.12.06
Spring DI(의존성 주입)에 대해서  (1) 2024.12.01
스프링으로 넘어 가기 전에..  (0) 2024.11.20