티스토리 뷰
* 개요
스프링 프레임워크 이용시 @Service나 @Autowired 사용하여
종전에 서비스 객체 선언하고 연결하는 동작을 XML로 정의하던 것을 대체한다.
프레임워크, API 만들어 사용하려 하다보면 어노테이션을 직접 정의해서 사용할 필요성을 느낌.
* 기초 / 사용자 정의 어노테이션
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 ) 등을 설정하는 방법은 다음 포스트에 잘 설명됨
실제 어노테이션 찾고 주입하는 컨테이너 클래스 만드는 예제
직접 정의한 어노테이션이 사용되는 클래스를 찾고 데이터를 가져오는 방법
자바 리플렉션에 대한 이해가 필요함
'SW개발 > Java' 카테고리의 다른 글
맵 정렬 - TreeMap (0) | 2018.11.30 |
---|---|
정리하다만/static (0) | 2018.11.19 |
자바 개발자 중급? (0) | 2018.11.04 |
[종합] 자바 중급 - 초보를 넘어서려면 알아야 할 것들 (0) | 2018.11.04 |
정규표현식 그룹 캡쳐 활용 - 패턴 일치부분 가져오기 (0) | 2018.08.20 |