Spring core 오픈소스 분석 01 -AnnotatedElementUtils getMergedAnnotationAttributes
해당 메서드 코드 : 테스트 코드 통해서 분석 @Testvoid getMergedAnnotationAttributesWithConventionBasedComposedAnnotation() { Class element = ConventionBasedComposedContextConfigClass.class; String name = ContextConfig.class.getName(); Ann
kwaksh2319.tistory.com
지난번에 이어서 테스트코드를 먼저 확인해보자 .
@Test
void getMergedAnnotationAttributesWithHalfConventionBasedAndHalfAliasedComposedAnnotationV1() {
Class<?> clazz = HalfConventionBasedAndHalfAliasedComposedContextConfigClassV1.class;
String name = ContextConfig.class.getName();
String simpleName = clazz.getSimpleName();
AnnotationAttributes attributes = getMergedAnnotationAttributes(clazz, name);
assertThat(attributes).as("Should find @ContextConfig on " + simpleName).isNotNull();
assertThat(attributes.getStringArray("locations")).as("locations for class [" + simpleName + "]")
.containsExactly("explicitDeclaration");
assertThat(attributes.getStringArray("value")).as("value for class [" + simpleName + "]")
.containsExactly("explicitDeclaration");
// Verify contracts between utility methods:
assertThat(isAnnotated(clazz, name)).isTrue();
}
이번엔
HalfConventionBasedAndHalfAliasedComposedContextConfigClassV1
클래스를 리플랙션 클래스에가져왓다.
Class<?> clazz = HalfConventionBasedAndHalfAliasedComposedContextConfigClassV1.class;
여기서도 마찬가지로
String name = ContextConfig.class.getName();
String simpleName = clazz.getSimpleName();
AnnotationAttributes attributes = getMergedAnnotationAttributes(clazz, name);
속성값들을 합칩니다.
그러면 여기서 궁금할꺼다.
getMergedAnnotationAttributes의 spring framework에서의 역할이다.
언재 사용하는걸까? 이것저것 찾아보니 어노테이션 커스텀하는경우 이용을 한다고 합니다.
예제로 간단히 코드로 보겠습니다.
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
@BaseAnnotation("defaultBase")
public @interface CustomConfig {
// 운영 환경, 로깅 레벨, 캐시 지속시간 등 필요한 옵션 추가
String env() default "prod";
int cacheDuration() default 300;
}
@Component
public class BusinessService {
public void performBusinessLogic() {
// 현재 클래스 및 메소드에 대한 병합된 애너테이션 속성 조회
AnnotationAttributes attributes = AnnotatedElementUtils.getMergedAnnotationAttributes(this.getClass(), CustomConfig.class);
if (attributes != null) {
String env = (String) attributes.get("env");
int cacheDuration = (Integer) attributes.get("cacheDuration");
// env에 따른 로직 분기 또는 캐싱 로직 초기화
System.out.println("Running in environment: " + env + ", Cache duration: " + cacheDuration);
}
// 실제 비즈니스 로직 실행
}
}
예제를 보시면 prod 환경의 케싱 유지시간의 커스텀 어노테이션을 만들었습니다.
'웹 > Spring' 카테고리의 다른 글
Spring core 오픈소스 분석 01 -AnnotatedElementUtils getMergedAnnotationAttributes (0) | 2025.04.05 |
---|---|
Async 어노테이션 ,@Async 비동기 처리 (0) | 2025.02.19 |
@Builder? 와 Bulder 패턴? (0) | 2025.02.12 |
Reflection api GetMethod (0) | 2024.04.20 |
Spring Data JPA - 구성 (0) | 2024.02.25 |