java裡面註解的簡單認識
阿新 • • 發佈:2018-12-06
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()); } } } }