상세 컨텐츠

본문 제목

Java - 어노테이션 (Annotation) 활용위치와 사용시간

개발/Java

by 뉴에이스 2018. 10. 16. 18:04

본문

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());
	}
}

관련글 더보기

댓글 영역