자바 사용자 정의 실행 시 주석

7360 단어 자바
자바 주석 - 사용자 정의 주석 - 실행 시 주석@Retention (RetentionPolicy. RUNTIME) 는 실행 시 보류 하 는 주 해 를 표시 합 니 다.우 리 는 실행 할 때 자바 반사 체 제 를 통 해 주석 정 보 를 얻 을 수 있 습 니 다.
실행 시 프로세서 라 이브 러 리 설명 (java. lang. reflect. AnotatedElement)
인터페이스 AnnotatedElement 는 프로그램의 주석 요 소 를 표시 하고 반사 로 읽 을 수 있 습 니 다.인터페이스 에서 돌아 오 는 모든 주 해 는 가 변 적 이지 않 고 직렬 화 될 수 있 으 며 인터페이스 방법 으로 돌아 오 는 배열 은 수정 할 수 있 으 나 원래 의 주해 에 영향 을 주지 않 습 니 다.인터페이스의 getAnnotations ByType (Class) 과 getDeclared Annotations ByType (Class) 방법 은 중복 주 해 를 지원 합 니 다.
사용자 정의 실행 기 설명 예
항목 주소
대상 이 class 인 주해
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Created by victor on 2017/5/30.
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface ClassInfo {

    String name() default "";

    String description() default "";
}

목표 방법 에 대한 주해
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Created by victor on 2017/5/30.
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MethodInfo {

    String name() default "";

    String description() default "";
}

대상 이 속성 인 주해
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Created by victor on 2017/5/30.
 */

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface FieldInfo {

    String name() default "";

    String description() default "";
}

주해 처리 도구
import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * Created by victor on 2017/5/30.
 */
public class InfoUtil {
    public static void HandleInfo(Class> clazz){
        if(clazz.isAnnotationPresent(ClassInfo.class)) {
            ClassInfo classInfo = clazz.getAnnotation(ClassInfo.class);
            System.out.println("classInfo:
"
+classInfo.name()+"::"+classInfo.description()); } Method[] methods = clazz.getDeclaredMethods(); for(Method item: methods){ if(item.isAnnotationPresent(MethodInfo.class)){ MethodInfo methodInfo = item.getAnnotation(MethodInfo.class); System.out.println("methodInfo:
"
+methodInfo.name()+"::"+methodInfo.description()); } } Field[] fields = clazz.getDeclaredFields(); for(Field item: fields){ if(item.isAnnotationPresent(FieldInfo.class)){ FieldInfo fieldInfo = item.getAnnotation(FieldInfo.class); System.out.println("methodInfo:
"
+fieldInfo.name()+"::"+fieldInfo.description()); } } } }

실체 클래스 demo
/**
 * Created by victor on 2017/5/30.
 */
@ClassInfo(name = "DemoClass",description = "A demo class for annotation")
public class Demo {

    @FieldInfo(name = "DemoField",description = "A demo field for annotation")
    private String name;

    @MethodInfo(name = "DemoMethod", description = "A demo method for annotation")
    public String getName() {
        return name;
    }
}

테스트 클래스
/**
 * Created by victor on 2017/5/30.
 */
public class Test {
    public static void main(String[] args){
        InfoUtil.HandleInfo(Demo.class);
    }
}
classInfo:
DemoClass::A demo class for annotation
methodInfo:
DemoMethod::A demo method for annotation
methodInfo:
DemoField::A demo field for annotation

참고 자료: 자바 공식 튜 토리 얼

좋은 웹페이지 즐겨찾기