android 自定义注解 通过反射获取注解属性值
2017-11-08 16:52
357 查看
参考文章:http://xuwenjin666.iteye.com/blog/1637247
从上面代码可以看出Target 对应的作用域(Target可以接受多个参数,逗号分隔即可)
例如:
1.自定义注解
package cn.veji.hibernate.po; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface Privilege { String[] value(); }
public enum ElementType { TYPE,// 类、接口、注解类型或枚举 FIELD, //属性 METHOD, //方法 PARAMETER,// 用于描述参数 CONSTRUCTOR,//构造方法 LOCAL_VARIABLE,//局部变量 ANNOTATION_TYPE,//注解类 PACKAGE //包 }
从上面代码可以看出Target 对应的作用域(Target可以接受多个参数,逗号分隔即可)
例如:
@Target({ElementType.TYPE,ElementType.METHOD,ElementType.FIELD,ElementType.CONSTRUCTOR}) @Retention(RetentionPolicy.RUNTIME) public @interface MyTestIn { String author() default "kaelthas.wang"; String address() default "山东青岛"; }
2.获取类注解属性值
/** * 读取注解值 * * @param annotationClasss 处理Annotation类名称 * @param annotationField 处理Annotation类属性名称 * @param className 处理Annotation的使用类名称 * @return * @throws Exception */ @SuppressWarnings("all") public Map<String, String> loadVlaue(Class annotationClasss, String annotationField, String className) throws Exception { System.out.println("处理Annotation类名称 === "+annotationClasss.getName()); System.out.println("处理Annotation类属性名称 === "+annotationField); System.out.println("处理Annotation的调用类名称 === "+className); Map<String, String> map = new HashMap<String, String>(); Method[] methods = Class.forName(className).getDeclaredMethods(); for (Method method : methods) { if (method.isAnnotationPresent(annotationClasss)) { Annotation p = method.getAnnotation(annotationClasss); Method m = p.getClass() .getDeclaredMethod(annotationField, null); //这里根据属性参数类型进行强制类型转换 String[] values = (String[]) m.invoke(p, null); for (String key : values) { System.out.println("注解值 === " + key); map.put(key, key); } } } System.out.println("map数量 === " + map.size()); return map; }
3.获取方法注解属性值
这里的属性值为int 强制类型转换时候使用Integer@SuppressWarnings("all") public int loadVlaue(Class annotationClasss, String annotationField, String className) { System.out.println("处理Annotation类名称 === " + annotationClasss.getName()); System.out.println("处理Annotation类属性名称 === " + annotationField); System.out.println("处理Annotation的调用类名称 === " + className); Map<String, String> map = new HashMap<String, String>(); try { Method[] methods = Class.forName(className).getDeclaredMethods(); Class test = Class.forName(className); if (test.isAnnotationPresent(annotationClasss)) { Annotation p = test.getAnnotation(annotationClasss); Method m = p.getClass() .getDeclaredMethod(annotationField, null); return (Integer) m.invoke(p, null); } } catch (Exception e) { return -1; } return -1; }
相关文章推荐
- java中自定义注解并通过反射获取注解属性值
- java中自定义注解并通过反射获取注解属性值
- java中自定义注解并通过反射获取注解属性值
- java中自定义注解并通过反射获取注解属性值
- java中自定义注解并通过反射获取注解属性值
- java 自定义注解annotation和通过反射获取注解
- spring mvc框架源码分析(二)-自定义注解以及通过反射获取注解
- Column注解的的RetentionPolicy的属性值是RUTIME,这样注解处理器可以通过反射,获取到该注解的属性值,从而去做一些运行时的逻辑处理
- spring boot 中 自定义注解,并通过注解反射获取类实例
- Java通过反射获取自定义注解
- Android通过Java反射获取系统属性值
- Reflect 通过反射获取自定义注解值给另外一个对象赋值
- Reflect 通过反射获取自定义注解值给另外一个对象赋值
- Reflect 通过反射获取自定义注解值给另外一个对象赋值
- 自己动手设计java web框架(二)-自定义注解以及通过反射获取注解
- Android-反射+注解获取控件ID
- c#通过反射获取类上的自定义特性
- Android 通过反射及AIDL获取双卡手机SIM卡相关信息,及注册监听
- Java自定义注解和运行时靠反射获取注解
- Android(java)学习笔记109:通过反射获取成员变量和成员方法并且使用