Annotation 자세히 보기
1.@Component

Spring Bean에 등록하는 역할을 수행한다.
Spring Bean은 애플리케이션의 구성요소를 정의하는 객체이다.
@Indexed
- 클래스가 컴포넌트 스캔의 대상으로 Spring Bean에 더 빠르게 등록되도록 도와준다.
2.@Target

- @Target 이 선언된 하위 어노테이션이 어떤 범위에 적용되는지 설정한다.
- ElementType Enum 속성

- 각각의 Enum마다 적용되는 범위가 상단에 주석으로 설명되어 있다.
3.@Retention

- @Retention 하위의 어노테이션이 얼마나 오래 유지되는지를 결정한다.
- RetentionPolicy Enum 속성

- SOURCE
- 소스 코드(.java)에서만 유지된다.
- 컴파일러에 의해 클래스 파일로 저장되지 않는다.
- CLASS
- 컴파일된 클래스 파일(.class)에 저장되지만, JVM이 실행 시 읽지 않는다. (주석과 같음)
- Default 값이다.
- RUNTIME
- 클래스 파일(.class)에 저장되고, JVM에 의해 런타임 시점에 읽을 수 있다.
- 즉, 실제 런타임 시점의 코드에 반영되어 영향을 준다.
4.@Documented

Javadoc 등의 문서화 도구에 의해 문서화되어야 함을 나타낸다.
@Controller VS @RestController
개발에서 우선순위는 항상 자세히 선언된것이 우선순위가 높다.
@Controller다시보기

@Target(ElementType.Type)
- Class, Interface, Annotation, Enum, Record Declaration(Java16) 에 적용할 수 있다.
@Retention(RetentionPolicy.RUNTIME)
- 클래스 파일(.class)에 저장되고, JVM에 의해 런타임 시점에 읽을 수 있다.
@Document
- Javadoc 등의 문서화 도구에 의해 문서화되어야 함을 나타낸다.
@Component
-
Spring Bean에 등록한다.
-
싱글톤으로 관리된다.
@RestController 다시보기

- @Controller에 @ResponseBody가 결합된 어노테이션
- @RestController는 @Controller와 달리 각 메서드마다 @ResponseBody를 추가하지 않아도 된다
@ResponseBody 자세히 보기

@Target{ElementType.TYPE, ElementType.METHOD} 이지만, @RestController 은@Target(ElementType.TYPE) 이기 때문에 TYPE 범위에만 @ResponseBody가 적용된다.