java自定义注解入门(2)
来源:互联网 发布:淘宝充值软件多钱 编辑:程序博客网 时间:2024/05/28 22:10
一、 定义注解
以下创建两个注解分别作用于类方法和类成员变量
实例目的:为类赋值并检查类成员变量是否合法
/*------------注解-----------------*///成员变量注解@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)@Documented@interface checkValues {public int sizeMin();public int sizeMax();}//方法类型注解@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documented@interface setValues {public String value();}二、创建注解处理器
该处理器完成对类的赋值和检查并打印检查结果
/*------------------注解处理器----------------*/class annotationUitl {public Object exeAnnotation(Class<?> ap) {//获取目标类所有的字段Field[] fields = ap.getDeclaredFields();//获取目标类所有的方法Method[] methods = ap.getDeclaredMethods();Object obj =null;try {//实例化对象 obj= ap.newInstance();//遍历方法赋值for(Method method : methods){// 判断该方法上面是否有setValues注解if(method.isAnnotationPresent(setValues.class)){//获取该方法中setValues注解对象setValues set = (setValues)method.getAnnotation(setValues.class);//把在注解中的变量赋值给对象method.invoke(obj, set.value());}}//遍历属性检查for (Field field : fields) {// 获取该字段上面的所有注解if (field.isAnnotationPresent(checkValues.class)) {//获取该方法中setValues注解对象checkValues check = (checkValues)field.getAnnotation(checkValues.class);int min = check.sizeMin();int max = check.sizeMax();//设置字段访问权限 field.setAccessible(true);//获取对应属性的值 Object o = field.get(obj); if(o instanceof String){ String str =o.toString(); int i = str.length(); if(i<min||i>max){ System.out.println(obj.getClass().getName()+":"+field.getName()+"长度不合法"); }else{ System.out.println(str+"符合"); } } }}} catch (InstantiationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalArgumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch blocke.printStackTrace();}return obj;}三、创建apple类并使用注解
使用刚才自定义注解
<pre name="code" class="java">@checkValues(sizeMin = 1, sizeMax = 10) 检查成员变量长度范围(1-10)
<pre name="code" class="java">@setValues(value = "红富士") 赋值
/*--------------使用注解-------------------*/class apple {@checkValues(sizeMin = 1, sizeMax = 10)private String name;@checkValues(sizeMin = 5, sizeMax = 10)private String type;public String getName() {return name;}@setValues(value = "苹果")public void setName(String name) {this.name = name;}public String getType() {return type;}@setValues(value = "红富士")public void setType(String type) {this.type = type;}}四、测试运行
public static void main(String[] args) {//创建apple对象apple ap = new apple();//执行注解处理器,返回对象apple obj=(apple)new annotationUitl().exeAnnotation(ap.getClass());System.out.println("name:"+obj.getName());System.out.println("type:"+obj.getType());}输出结果:
0 0
- java自定义注解入门(2)
- 深入理解Java(2):注解(Annotation)自定义注解入门
- Java:注解(Annotation)自定义注解入门
- Java注解 (Annotation)自定义注解入门
- Java:注解(Annotation)自定义注解入门
- JAVA 注解(Annotation)自定义注解入门
- java注解(Annotation)自定义注解入门
- java 注解(Annotation)自定义注解入门
- Java注解(Annotation)自定义注解入门
- Java注解(Annotation)自定义注解入门
- java 注解:注解(Annotation)自定义注解入门
- Java自定义注解入门
- java自定义注解入门
- Java自定义注解入门
- java自定义注解入门(1)
- java自定义注解(Annotation)入门
- 深入理解Java:注解(Annotation)自定义注解入门
- 深入理解Java:注解(Annotation)自定义注解入门
- android 一个应用两个入口一个应用两个快捷方式(不同图标显示)
- 这30类CSS选择器 你必须记在脑袋里!
- 记录Controller处理时间
- Javascript、Jquery获取浏览器和屏幕各种高度宽度
- <c:forEach 的常用整理
- java自定义注解入门(2)
- Android 样式开发之shape
- Android常用代码片段(一)
- 图——Prim最小生成树算法(矩阵方式实现)
- Android中ListView添加事件并获取选中项的值
- MonaServer服务
- 彻底明白Android中AIDL及其使用
- HashTable和HashMap区别
- ChinaUnix中fastdfs论坛资料之FastDFS一个高效的分布式文件系统