문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 다음 판 | 이전 판 | ||
|
java:annotation [2012/01/20 16:26] kwon37xi 새로 만듦 |
java:annotation [2023/12/25 15:15] (현재) kwon37xi |
||
|---|---|---|---|
| 줄 1: | 줄 1: | ||
| ====== Java Annotation ====== | ====== Java Annotation ====== | ||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | * [[https:// | ||
| + | * [[java: | ||
| + | ===== Meta Annotation ===== | ||
| + | * [[http:// | ||
| + | |||
| + | ==== @Inherited ==== | ||
| + | <code java> | ||
| + | @Inherited | ||
| + | @interface ForEveryone { } | ||
| + | |||
| + | @interface JustForMe { } | ||
| + | |||
| + | @ForEveryone | ||
| + | @JustForMe | ||
| + | class Superclass { } | ||
| + | |||
| + | class Subclass extends Superclass { } | ||
| + | </ | ||
| + | 위와 같은 코드에서 '' | ||
| ===== Annotation 객체 생성하기 instanciation of annotation ===== | ===== Annotation 객체 생성하기 instanciation of annotation ===== | ||
| + | ==== 어노테이션은 인터페이스다! ==== | ||
| + | * 어노테이션은 기본적으로 인터페이스이다. | ||
| + | * 인터페이스는 implements 로 구현 클래스를 만든뒤에 객체를 생성해주면 된다. 그걸로 끝! | ||
| + | * <code java> | ||
| + | // 아래와 같은 어노테이션이 있을 때! | ||
| + | @Target(ElementType.PARAMETER) | ||
| + | @Retention(RetentionPolicy.RUNTIME) | ||
| + | @Documented | ||
| + | public @interface LoginUser { | ||
| + | boolean required() default true; | ||
| + | SomeValue [] someValues() default {}; | ||
| + | } | ||
| + | |||
| + | // 아래와 같이 클래스로 구현한 뒤에 해당 클래스의 인스턴스를 생성하면 된다. | ||
| + | public static class FakeLoginUser implements LoginUser { | ||
| + | |||
| + | private boolean requiredValue = true; | ||
| + | |||
| + | private SomeValue[] someValueValue = {}; | ||
| + | |||
| + | public FakeLoginUser(boolean requiredValue, | ||
| + | this.requiredValue = requiredValue; | ||
| + | this.someValueValue = someValueValue; | ||
| + | } | ||
| + | |||
| + | @Override | ||
| + | public Class<? extends Annotation> | ||
| + | return LoginUser.class; | ||
| + | } | ||
| + | |||
| + | @Override | ||
| + | public boolean required() { | ||
| + | return requiredValue; | ||
| + | } | ||
| + | |||
| + | @Override | ||
| + | public SomeValue[] someValue() { | ||
| + | return someValueValue; | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ==== 어노테이션을 직접 지정한 뒤에 Reflection으로 생성하기 - 복잡하므로 하지 말 것 ==== | ||
| * [[http:// | * [[http:// | ||
| * [[http:// | * [[http:// | ||
| - | * 내가 만들어본 어노테이션 객체 생성하기 | + | * 내가 만들어본 어노테이션 객체 생성하기 |
| - | <code java> | + | private |
| - | private | + | private |
| - | private | + | |
| - | public void loginUserAnnotationSupports(@LoginUser | + | public void myAnnSupports(@MyAnn Object |
| - | | + | |
| Annotation[][] parameterAnnotations = this.getClass() | Annotation[][] parameterAnnotations = this.getClass() | ||
| - | .getMethod(" | + | .getMethod(" |
| - | | + | |
| - | | + | |
| } | } | ||
| </ | </ | ||