-
AnnotatedTypeMetadata - 어노테이션 정보 추출Spring/Framework 2024. 3. 25. 10:46
org.springframework.core.type.AnnotatedTypeMetadata 인터페이스
개요
org.springframework.core.type.AnnotatedTypeMetadata 인터페이스는 주어진 클래스에 대한 애노테이션 정보를 추출하는 데 사용됩니다. 이 인터페이스는 다음과 같은 기능을 제공합니다.
- 애노테이션 유무 확인: 특정 애노테이션이 클래스에 존재하는지 확인합니다.
- 애노테이션 속성 추출: 애노테이션의 속성 값을 가져옵니다.
- 메타데이터 추출: 클래스 이름, 인터페이스, 상속 관계 등의 메타데이터를 추출합니다.
핵심 기능
- isAnnotated(String annotationName): 특정 애노테이션이 존재하는지 확인합니다.
- getAnnotationAttributes(String annotationName): 애노테이션의 속성 값을 Map 형태로 가져옵니다.
- getAnnotationTypes(): 클래스에 존재하는 모든 애노테이션의 이름을 가져옵니다.
- getClassName(): 클래스의 이름을 가져옵니다.
- getInterfaces(): 클래스가 구현하는 인터페이스 목록을 가져옵니다.
- getSuperClassName(): 클래스의 상위 클래스 이름을 가져옵니다.
사용 방법
- AnnotatedTypeMetadata 인터페이스를 구현하는 클래스를 사용합니다.
- isAnnotated(), getAnnotationAttributes(), getAnnotationTypes() 등의 메소드를 사용하여 애노테이션 정보를 추출합니다.
예제 코드
Java@Component public class MyComponent { } public class Example { public static void main(String[] args) { AnnotatedTypeMetadata metadata = AnnotatedTypeMetadata.introspect(MyComponent.class); // @Component 애노테이션 존재 여부 확인 if (metadata.isAnnotated(Component.class.getName())) { System.out.println("MyComponent는 @Component 애노테이션을 가지고 있습니다."); } // @Component 애노테이션 속성 추출 Map<String, Object> attributes = metadata.getAnnotationAttributes(Component.class.getName()); System.out.println("value 속성: " + attributes.get("value")); // 클래스 이름 출력 System.out.println("클래스 이름: " + metadata.getClassName()); } }
코드를 사용할 때는 주의가 필요합니다.content_copy출력 결과
MyComponent는 @Component 애노테이션을 가지고 있습니다. value 속성: myComponent 클래스 이름: com.example.MyComponent
참고 자료
- Spring Framework 6.1.4 API - AnnotatedTypeMetadata: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/core/type/AnnotatedTypeMetadata.html
- Spring 애노테이션 메타데이터 추출하기 - 꼼꼼한 개발자의 노트: [유효하지 않은 URL 삭제됨]
추가 정보
- AnnotatedTypeMetadata 인터페이스는 프록시 클래스를 처리할 때 유용합니다.
- ClassUtils 클래스는 AnnotatedTypeMetadata 인스턴스를 생성하는 데 사용할 수 있습니다.
'Spring > Framework' 카테고리의 다른 글
Java의 미래, Virtual Thread - 4월 우아한테크세미나 (1) 2024.04.23 org.aspectj.runtime.internal.AroundClosure.ProceedingJoinPoint (0) 2024.03.29 Condition - Bean 등록 여부를 조건부로 제어 (0) 2024.03.25 Vritual Thread - Kakao tech meet (1) 2023.12.12 spring boot 3.2 - restclient & declarative http interface (2) 2023.12.03