摘要:知識點總結注解解析注解知識點總結注解通過反射獲取類函數或成員上的運行時注解信息,從而實現動態控制程序運行的邏輯。
Java知識點總結(注解-解析注解)
@(Java知識點總結)[Java, 注解]
通過反射獲取類、函數或成員上的運行時注解信息,從而實現動態控制程序運行的邏輯。
使用注解步驟:
定義注解
類中使用注解
解析注解
示例:
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(value={ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) public @interface MethodAnnotation { String value(); }
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(value={ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface FieldAnnotation { String columnName(); String type(); int length(); }
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(value={ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface TableAnnotation { String value(); }
@TableAnnotation("tb_student") public class Student { @FieldAnnotation(columnName="id",type="int",length=10) private int id; @FieldAnnotation(columnName="sname",type="varchar",length=10) private String name; @FieldAnnotation(columnName="age",type="int",length=3) private int age; @MethodAnnotation("get方法上的注解") public int getId() { return id; } @MethodAnnotation("set方法上的注解") public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.lang.reflect.Method; public class Demo3 { // 使用反射獲取注解,生成類對應的數據庫表 private static void test1(Class clazz) { // 獲得類所有的注解 Annotation[] annotations = clazz.getAnnotations(); for (Annotation a : annotations) { System.out.println(a); } // 通過注解的名字獲取注解 TableAnnotation t = (TableAnnotation) clazz.getAnnotation(TableAnnotation.class); System.out.println(t.value()); // 獲得屬性上的注解 try { Field f = clazz.getDeclaredField("age"); FieldAnnotation fa = f.getAnnotation(FieldAnnotation.class); System.out.println("字段名稱:" + fa.columnName() + ",字段類型:" + fa.type() + ",字段長度:" + fa.length()); } catch (NoSuchFieldException | SecurityException e) { e.printStackTrace(); } // 根據獲得的表名、字段信息,拼出DDL語句,然后使用JDBC執行這個SQL語句,在數據庫中生成相關的表 } //獲取方法上的注解 private static void test2(Class clazz) { // 獲取所有方法上的注解 Method[] ms = clazz.getMethods(); for (Method m : ms) { boolean isExist = m.isAnnotationPresent(MethodAnnotation.class); if (isExist) { MethodAnnotation ma = m.getAnnotation(MethodAnnotation.class); System.out.println(ma); } } // 獲取指定方法上的注解 try { Method method = clazz.getMethod("getId", null); Annotation[] as = method.getAnnotations(); for (Annotation a : as) { if (a instanceof MethodAnnotation) { MethodAnnotation ma = (MethodAnnotation) a; System.out.println(ma); } } } catch (NoSuchMethodException | SecurityException e) { e.printStackTrace(); } } public static void main(String[] args) { Class clazz = null; try { clazz = Class.forName("com.gs.Student"); } catch (ClassNotFoundException e) { e.printStackTrace(); } test1(clazz); test2(clazz); } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/71561.html
摘要:注解提供了一種安全的類似注釋的機制,用來將任何的信息或元數據與程序元素類方法成員變量等進行關聯。為程序的元素類方法成員變量加上更直觀更明了的說明,這些說明與程序的業務邏輯無關,并且提供給指定的工具或框架使用。 什么是注解? Annotation 是 Java5 之后開始引入的新特性,中文為注解。注解提供了一種安全的類似注釋的機制,用來將任何的信息或元數據(metadata)與程序元素(...
摘要:我們定義注解元素時,經常使用空字符串作為默認值。也經常使用負數比如表示不存在的含義示例既可以修飾方法,也可以修飾類運行時使用關鍵字定義注解成員以無參無異常方式聲明。方法的名稱就是參數的名稱可以使用為成員指定一個默認值浙江大學清華大學張三 Java知識點總結(注解-自定義注解) @(Java知識點總結)[Java, 注解] 使用@interface自定義注解時,自動繼承了java.lan...
摘要:知識點總結注解元注解知識點總結注解元注解的作用就是負責注解其他注解。 Java知識點總結(注解-元注解 ) @(Java知識點總結)[Java, 注解] 元注解的作用就是負責注解其他注解。 Java5.0定義的元注解: @Target @Retention @Documented @Inherited @Target 用于描述注解的使用范圍 @Target(value=Elemen...
閱讀 2814·2023-04-26 02:00
閱讀 2771·2019-08-30 15:54
閱讀 860·2019-08-30 11:15
閱讀 1502·2019-08-29 15:31
閱讀 917·2019-08-29 14:12
閱讀 489·2019-08-29 13:08
閱讀 838·2019-08-27 10:51
閱讀 2706·2019-08-26 12:17