🧩 Annotation 자세히 보기
1. @Component – 스프링 빈 등록 어노테이션
Servlet 객체를 관리하듯,@Component로 선언된 객체를 관리함@Indexed 포함 → 컴포넌트 스캔 속도 향상✍️ 예시 – Servlet 비교
@WebServlet(name="ExampleServlet", urlPatterns = "/example")
public class ExampleServlet extends HttpServlet {
protected void service(HttpServletRequest req, HttpServletResponse resp) {
// logic
}
}
2. @Target – 어노테이션 적용 대상 지정
TYPE, METHOD, FIELD, PARAMETER, CONSTRUCTOR, …)@Target(ElementType.TYPE) // 클래스, 인터페이스, 열거형 등
3. @Retention – 어노테이션 유지 범위 지정
| 유형 | 설명 |
|---|---|
SOURCE | 컴파일 시 사라짐 (소스에만 존재) |
CLASS | .class 파일에 존재하지만 JVM에서는 무시 (기본값) |
RUNTIME | .class에 존재하고 JVM이 런타임에 읽음 (Spring에서 자주 사용) |
@Retention(RetentionPolicy.RUNTIME)
4. @Documented – 문서화 표시
🔁 다시 보는 @Controller VS @RestController
🧭 @Controller
@Controller
public class ExampleController {
@RequestMapping("/view")
public String view() {
return "pageName"; // ViewResolver 처리 대상
}
}
📌 메타 어노테이션 확인
@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Component 포함 → Spring Bean 등록🌐 @RestController
@RestController
public class ExampleApi {
@RequestMapping("/api")
public String data() {
return "JSON or TEXT response";
}
}
@Controller + @ResponseBody 조합❓ @RestController에 왜 @ResponseBody가 중복 선언되는지?
@RestController는 클래스 레벨(ElementType.TYPE)에만 적용@ResponseBody는 클래스/메서드 둘 다 사용 가능@Target 선언