Java解析注解
目錄
?
?
概念
實例
?
概念
通過反射獲取類、函數、或成員上運行時注解信息,從而實現動態控制程序運行的邏輯;
?
實例
如下面的這個Java工程:
源碼如下:
Base.java
package my;public interface Base {public String strValue();public int intValue(); }Description.java
package my;import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;@Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Inherited public @interface Description {String DesStrValue();int DesIntValue() default 10086; }ParseAnn.java
package my;import java.lang.reflect.Method;public class ParseAnn {@SuppressWarnings({ "unchecked", "rawtypes" })public static void main(String[] args) {// 1.使用類加載器加載類try {Class c = Class.forName("my.SubClass");//找到類的注解boolean isExist = c.isAnnotationPresent(Description.class);if(isExist) {//拿到注解實例Description d = (Description)c.getAnnotation(Description.class);System.out.println(d.DesStrValue() + "\t" + d.DesIntValue());//找到注解上的方法Method[] ms = c.getMethods();for(Method m : ms) {boolean isMExist = m.isAnnotationPresent(Description.class);if(isMExist) {Description dm = (Description)m.getAnnotation(Description.class);System.out.println(dm.DesStrValue() + "\t" + dm.DesIntValue());}}}}catch(ClassNotFoundException e) {System.out.println(e.toString());}SubClass subClass = new SubClass();subClass.strValue();} }SubClass.java
package my;@Description(DesStrValue = "這是一個類") public class SubClass implements Base {@Override@Description(DesStrValue = "SubClass 中的StrValue的")public String strValue() {// TODO Auto-generated method stubSystem.out.println();return null;}@Override@Description(DesStrValue = "SUbClass中intValue的", DesIntValue = 10010)public int intValue() {// TODO Auto-generated method stubreturn 0;} }程序運行截圖如下:
這里拿到函數上注解的方式有兩種,一個是使用:
Annotation[] as = m.getAnnotations();
一種是使用Description)m.getAnnotation(Description.class);
如上面的代碼所示!
?
?
?
總結
- 上一篇: Spring Boot中使用模板引擎参数
- 下一篇: 初识Java中注解的分类