java - 종류 - 한줄 주석




자바에서 주석의 기본 요소 값 가져 오기 (2)

내 자신의 주석을 작성했습니다. 리플렉션을 통해 내 코드에서 결정을 내립니다. 주석에는 유일한 요소로 설정된 기본값이 있습니다. 리플렉션을 통해 기본값에 액세스 할 수있는 방법이 있습니까?

PageableRequestMapping.java (주석)

package org.tothought.controllers.annotations;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
public @interface PageableRequestMapping {
    String variablePath() default "/";
}

기본 값 검색을위한 Psuedo 코드

private int parsePageNumber(StringBuffer requestURL,
        PageableRequestMapping pageableRequestMapping) {

        String variablePath = pageableRequestMapping.variablePath();

    //Psuedo code doesn't work in Java, included to illustrate intentions   
        if(variablePath.equalsIgnoreCase(pageableRequestMapping.variablePath().default())){
           //handle default case    
        }else{
          //handle different case
        }
        return 0;
}

이 문제에 대한 제 연구 결과가 없습니다. 나는이 값이 클래스를 통해 정적 인 방식으로 액세스 될 수 있다고 이론화했지만 그렇게 할 수는 없다. 그래서 두 가지 질문이 남아 있습니다.

  • 주석 내에서 요소의 기본값을 가져올 수 있습니까?
  • 그렇다면 어떻게?

또한이 값을 하드 코딩 할 수 있음을 알고 있지만 프로그램을 약간 더 강력하게 만들고 싶습니다.


리플렉션을 사용하여 Method 객체를 가져온 다음 Method#getDefaultValue() 있습니다.

Method method = pageableReqMapping.annotationType().getMethod("variablePath");
String variablePath = (String) method.getDefaultValue();

다음은 구체적인 예입니다.

public class AnnotationTest {

  public static void main(String[] args) throws Exception {
    Class<?> clazz = Annotation.class;
    Method method = clazz.getDeclaredMethod("value");
    String value = (String) method.getDefaultValue();
    System.out.println(value);
  }

  public @interface Annotation {
    String value() default "default value";
  }
}

주석을 클래스에 적용하고 리플렉션을 통해 클래스에서 검색하면 다음과 같이 할 수 있습니다.

@PageableRequestMapping
class MyUtilClass{
}


public String getDefaultValue(){
    PageableRequestMapping pageableRequestMapping = MyUtilClass.class.getAnnotation(PageableRequestMapping.class);
    return pageableRequestMapping.variablePath();
}




annotations