Java에서 제공하는 어노테이션 외에 사용자가 커스텀하여 사용할 수 있는 어노테이션이 있다. 바로 @interface라는 어노테이션이다. 이 @interface는 클래스 또는 변수를 특정 값으로 지정하여 관리할 수 있다는 장점이 있다.
1. @interface 어노테이션의 정의
@interface의 기본 포맷과 함께 사용되는 @Retention과@Target 어노테이션 옵션들의 정의는 다음과 같다. 아래 포맷으로 어노테이션 클래스가 된다!
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Authenticator {
int sortOrder() default 0;
}
@Retention : @interface 어노테이션의 적용범위로 어떤 시점까지 사용될 지 결정하는 옵션이다.
@Target : @interface 어노테이션의 적용 위치를 설정하는 옵션이다.
2. @interface 어노테이션의 적용 방법
클래스 또는 변수에 @interface를 적용하므로써 마치 라벨이 붙는것 처럼 특정 타입으로 지정된다. 그러면 우리는 해당 타입을 검색하여 값을 가져오거나 타입별로 실행이 가능하다.
@Authenticator(
authTargetType = AuthType.PASSWORD,
authMethod = 0,
sortOrder = 0
)
public class OtpAuthenticator {
위 코드에서는 클래스가 갖고있는 @Authenticator 커스텀 어노테이션의 authTargetType 값이 PASSWORD로 지정되어 있는걸로 보아 Password 인증을 시도할 경우 해당 클래스를 찾아 로직을 분기 시킬 수 있다. 또한, 순서번호를 지정하여 번호 정렬 후 순서대로 실행가능한 형태로도 실행이 가능하다.
3. 어노테이션 클래스 검색 방법
그럼 특정 어노테이션 클래스를 검색하는 방법은 무엇일까? 정답은 Spring에서 제공하는 ApplicationContext에 있다.
@Autowired
ApplicationContext applicationContext;
public getAnnotation() {
String[] beanNames = application.getBeanNamesForAnnotation(Authenticator.class)