MyTarget 어노테이션 소스
// @target - 메타어노테이션 적용
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
public @interface MyTarget {
}
MyTarget 어노테이션 활용 소스
@MyTarget // ElementType.Type
public class Test {
@MyTarget // ElementType.FIELD
public String msg;
@MyTarget // ElementType.METHOD
public void call() {}
// ElementType.PARAMETER
public void msg(@MyTarget String data) {}
}
ClassAnno 어노테이션 소스
// 클래스에서 선언 가능하게 설정
@Target(ElementType.TYPE)
// 클래스가 생성되고 실행하기 전 까지 참조
@Retention(RetentionPolicy.CLASS)
public @interface ClassAnno {
String value();
}
AnnoApply 어노테이션 소스
@ClassAnno("클래스 설정")
@RunAnno1("런타임 설정")
public class AnnoApply {
@RunAnno2(id="tester", msg="어노테이션 연습중..")
public void info() {}
public void call() {}
}
RunAnno1 어노테이션 소스
// 클래스에 선언 가능하고 실행시에 참조 가능하게 한다.
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface RunAnno1 {
String value();
}
RunAnno2 어노테이션 소스
// 메서드에 선언 가능하게 하고 실행시에 참조할 수 있어야 한다.
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface RunAnno2 {
String id();
String msg();
}
어노테이션 사용시간 확인
// 리플렉션을 통해 클래스, 메서드에 있는 어노테이션을 접근, 정보 추출
public static void main(String[] args) {
Class clz = AnnoApply.class;
// AnnoApply 클래스에 있는 ClassAnno 어노테이션의 정보를 받음
ClassAnno anno1 = clz.getAnnotation(ClassAnno.class);
RunAnno1 anno2 = clz.getAnnotation(RunAnno1.class);
System.out.println(anno1);
System.out.println(anno2);
// 어노테이션 객체에 있는 밸류값을 추출
System.out.println(anno2.value());
Method[] arr = clz.getDeclaredMethods();
for(Method m : arr) {
System.out.println(m.getName());
RunAnno2 anno = m.getAnnotation(RunAnno2.class);
if(anno == null) continue;
System.out.println("id : " + anno.id());
System.out.println("msg : " + anno.msg());
}
}
Java - 메이븐 프로젝트에서 ojdbc6 다운로드 안될때 (0) | 2020.01.21 |
---|---|
Java - 내부클래스(InnerClass) (0) | 2018.10.16 |
Java - 어노테이션 (Annotation) 멀티밸류 활용 (0) | 2018.10.16 |
Java - 어노테이션 (Annotation) 활용 (0) | 2018.10.15 |
Java - 어노테이션 (Annotation) (0) | 2018.10.12 |
댓글 영역