티스토리 뷰

SW개발/Java

사용자 정의 Annotation

개소왕 2018. 11. 4. 14:33

* 개요

스프링 프레임워크 이용시 @Service나 @Autowired 사용하여 

종전에 서비스 객체 선언하고 연결하는 동작을 XML로 정의하던 것을 대체한다.


프레임워크, API 만들어 사용하려 하다보면 어노테이션을 직접 정의해서 사용할 필요성을 느낌.



* 기초 / 사용자 정의 어노테이션

http://hamait.tistory.com/314


1. 다음과 같이 클래스를 선언만 해주면

public @interface MyAnno {

String value() default "default";

String name();

}


2. 다음과 같이 응용 가능

@MyAnno(name="abc")

public class MyAnnoUser {


}


- 어노테이션 선언시 사용할 수 있는 메타 어노테이션

@Retentation

  어노테이션 정보가 컴파일시 버려질것인지, 런타임까지 살아있게 할건지 정할 수 있다.

 @Target

  어노테이션 사용 가능한자바 요소 (클래스인지 메서드인지 등..) 를 지정 가능

 @Inherited

  어노테이션 선언한 클래스 상속시, 어노테이션 선언도 함께 상속되는지 지정

 @Documented

  JavaDoc 에 어노테이션 존재 표기할지 지정.





* 선언한 Annotation 가져오기


1. 위의 기초 예제를 입력한후


2. 다음 테스트 코드를 작성 (MyAnnoUser 클래스의 어노테이션을 가져오는 코드)

   

MyAnnoUser mau = new MyAnnoUser();

MyAnno ma = mau.getClass().getAnnotation(MyAnno.class);

System.out.println(ma);


3. 실행 하면 null 나올 것이다.

MyAnnoUser 클래스에 직접 정의한 @MyAnno 선언했는데 왜??


별다른 선언 없으면 @Retention(RetentionPolicy.CLASS) 가 기본값임.

어노테이션이 컴파일 시까지 유효하며 런타임에는 존재하지 않음.

따라서 다음과 같이 고쳐야 함


@Retention(RetentionPolicy.RUNTIME)

@MyAnno(name="abc")

public class MyAnnoUser {


}



- 클래스가 아닌 필드에 어노테이션 선언하거나 (@Target),

어노테이션이 적용 시점 (@Retention ) 등을 설정하는 방법은 다음 포스트에 잘 설명됨


https://jdm.kr/blog/216


실제 어노테이션 찾고 주입하는 컨테이너 클래스 만드는 예제

직접 정의한 어노테이션이 사용되는 클래스를 찾고 데이터를 가져오는 방법

자바 리플렉션에 대한 이해가 필요함




공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함