1. 程式人生 > >java裡面註解的簡單認識

java裡面註解的簡單認識

1. 什麼是註解?

  註解就是元資料,對java進行標記作用、

2. 註解與xml之間的區別?

1.xml可以實現對程式碼的鬆耦合,但是後期不利於看清楚裡面的邏輯關係

2.註解可以實現對程式碼的緊耦合,有利於看清楚邏輯關係

3. 註解的應用?

jdk自帶註解
    @Override

Spring的註解
    @Service
    @Controller

自定義註解
        @interface是定義註解的標識
        @Target 主要看我們註解用在什麼地方
        @Retention
            Rource  在編譯器期間後失效
            Class   在類載入完成後失效
            Runtime 在執行期結束後失效
        @Docuemnt 生成java文件
        @Inherited 可以進行繼承,這裡的繼承不是註解之間的繼承,是父類使用註解,在子類可以得到父類的資訊
 在註解裡面定義只能是成員變數(基本型別,String,Class,Enum,annotation)

4. 從java虛擬機器層面如何看待註解對元資料進行儲存和傳遞?(HSDB可以實現對探索HotSpot VM的執行時資料)比較重要

然後代理類中建立各個AnnotationInvocationHandler物件;每個AnnotationInvocationHandler對應一個我們宣告的Annotation介面類,
且AnnotationInvocationHandler收集對應註解介面類中的屬性鍵值對。我們通過反射method.getAnnotation(**Annotation.class)或者field.getAnnotation(**Annotation.class),
底層就是呼叫代理類,獲取AnnotationInvocationHandler中的memberValues。

5. 簡單的例子

1. 定義註解類

@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Interfacess {

    String desc() default "好好學習";

    String hobby() default "吃飯";

    int age() default 18;

}

2. 被使用註解的類

@Interfacess(desc="玩",hobby="打籃球",age=20)
public abstract class Persons {

    @Interfacess
    public String eat(){
        System.out.println("11111");
        return "喜歡吃拉麵";
    }

    public abstract  void make();

}

3. 繼承註解的類

public class Student extends Persons{

    @Override
    @Interfacess(desc="吃",hobby="騎車",age=30)
    public void make() {
        System.out.println("2222");
    }
}

4.測試類
 

public class Test{
    public static void main(String[] args) {
        Class<Student> clazz = Student.class;
        if(clazz.isAnnotationPresent(Interfacess.class)) {
            Interfacess interfacess = clazz.getAnnotation(Interfacess.class);
            System.out.println(interfacess.desc() +", "+interfacess.hobby()+", "+interfacess.age());
        }
        Method[] methods = clazz.getMethods();
        for(Method method : methods) {
            if(method.isAnnotationPresent(Interfacess.class)){
                Interfacess interfacess = method.getAnnotation(Interfacess.class);
                System.out.println(interfacess.desc() +", "+interfacess.hobby()+", "+interfacess.age());
            }
        }
    }
}