자바 사용자 정의 주석 과 반사

4978 단어
자바 주해 와 반사 1, 자바 에 서 는 네 가지 원 주 해 를 제공 합 니 다. 다른 주 해 를 전문 적 으로 설명 합 니 다. 각각 다음 과 같 습 니 다. 1, @ Retention 원 주 해 는 어떤 단계 에서 이 주석 정보 (수명 주기) 를 저장 해 야 하 는 지 표시 합 니 다.선택 할 수 있 는 RetentionPoicy 인 자 는 RetentionPolicy. SOURCE: 자바 원본 파일 에 머 물 러 있 고 컴 파일 러 는 RetentionPolicy. CLASS: class 파일 에 머 물 러 있 지만 VM 에 버 려 집 니 다 (기본 값) RetentionPolicy. RUNTime: 메모리 에 있 는 바이트 코드, VM 이 실 행 될 때 도 주 해 를 유지 합 니 다.따라서 반사 메커니즘 을 통 해 주해 의 정보 2, @ Target 원 주 해 를 읽 을 수 있 습 니 다. 기본 값 은 모든 요소 이 고 이 주 해 는 어디 에 사용 되 는 지 표시 합 니 다.사용 가능 한 Element Type 인 자 는 Element Type. CONSTRUCTOR: 구조 기 성명 Element Type. FIELD: 구성원 변수, 대상, 속성 (enum 인 스 턴 스 포함) Element Type. LOCAL 을 포함 합 니 다.VARIABLE: 부분 변수 성명 ElementType. METHOD: 방법 성명 ElementType. PACKAGE: 패키지 성명 ElementType. PARAMETER: 매개 변수 성명 ElementType. TYPE: 클래스, 인터페이스(주석 형식 포함) 또는 enum 성명 3, @ Documented 는 주 해 를 자바 Doc 에 포함 합 니 다. 4, @ Inheried 는 하위 클래스 가 부모 클래스 의 주 해 를 계승 할 수 있 도록 합 니 다. 2, 주해 의 정의 1, 주해 정의 형식 Public @ interface FieldMeta {}
package com.http.model;

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.ElementType;

@Retention(RetentionPolicy.RUNTIME) //     class        ,               
@Target({ElementType.FIELD})//         **      、     /    
@Documented//          javadoc 
public @interface FieldMeta {
    String name() default ""; 
    String description() default "";
} 

2. 실체 클래스 에서 의 응용 @ FieldMeta (name = "시리 얼 번호", description = ") private String id; @ FieldMeta (name =" 이름 ", description =") private String title;
package com.http.model;

public class ModelTest {
    @FieldMeta(name="   ",description="")
    private String    id;
    @FieldMeta(name="  ",description="      ")  
    private String    title;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
}

3. 주해 의 역력 반사
    //               
    public static void getField(){       
        try {
            Class clazz= Class.forName("com.http.model.HttpRequest");
            Field[] field=clazz.getDeclaredFields();
            //System.out.println(field.length);
            for(Field f:field){
                boolean isExist=f.isAnnotationPresent(FieldMeta.class);
                if(isExist){
                    FieldMeta tt=f.getAnnotation(FieldMeta.class);
                    System.out.println("--  :"+tt.id()+"  "+tt.name());
                }
                System.out.println(f.getName());
            }
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
    }
    

  //
  public static void getMethod(){ try { Class clazz = Class.forName("com.http.model.HttpRequest"); Method[] method=clazz.getDeclaredMethods(); System.out.println(method.length); for(Method f:method){ System.out.println(f.getName()); // } } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } }

좋은 웹페이지 즐겨찾기