从JDK1.5之后,注解在各大框架上得到了广泛的应用。下面这个例子中,你可以判断一个类或者方法或者字段上有没有注解,以及怎么获取上面的注解值。话不多说,代码如下:
AnnotationTest01.java
package com.zkn.newlearn.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE,ElementType.METHOD,ElementType.PARAMETER}) public @interface AnnotationTest01 { String color(); }
AnnotationTest02.java
package com.zkn.newlearn.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface AnnotationTest02 { String getUserName(); }
AnnotationTest04.java
package com.zkn.newlearn.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE,ElementType.FIELD}) public @interface AnnotationTest04 { String getAddress(); }
AnnotationTest03.java
package com.zkn.newlearn.annotation; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** * 测试Annotation * @author zkn * */ @AnnotationTest02(getUserName="zhangsan") public class AnnotationTest03 { @AnnotationTest01(color="red") public static String testColor(String color){ System.out.println(color); return color; } @AnnotationTest04(getAddress="北京市海淀区") String address; public static void main(String[] args) { //获取方法上的注解值 Method[] methods = AnnotationTest03.class.getDeclaredMethods(); if(methods != null){ for(Method method : methods){ AnnotationTest01 annotation = method.getAnnotation(AnnotationTest01.class); if(annotation == null) continue; Method[] me = annotation.annotationType().getDeclaredMethods(); for(Method meth : me){ try { String color = (String) meth.invoke(annotation,null); System.out.println(color); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } } } //获取类上的注解值 AnnotationTest02 anno = AnnotationTest03.class.getAnnotation(AnnotationTest02.class); if(anno != null){ Method[] met = anno.annotationType().getDeclaredMethods(); for(Method me : met ){ if(!me.isAccessible()){ me.setAccessible(true); } try { System.out.println(me.invoke(anno, null)); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } } //获取字段上的注解值 AnnotationTest03 noon = new AnnotationTest03(); Field[] field = AnnotationTest03.class.getDeclaredFields(); if(field != null){ for(Field fie : field){ if(!fie.isAccessible()){ fie.setAccessible(true); } AnnotationTest04 annon = fie.getAnnotation(AnnotationTest04.class); Method[] meth = annon.annotationType().getDeclaredMethods(); for(Method me : meth){ if(!me.isAccessible()){ me.setAccessible(true); } try { //给字段重新赋值 fie.set(noon, me.invoke(annon, null)); System.out.println(fie.get(noon)); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } } } } }
时间: 2025-01-27 08:46:37