java注解讲解与实用示例
来源:互联网 发布:尚学堂 js 编辑:程序博客网 时间:2024/06/05 06:13
java注解使用入门到高级使用
java从1.5开始给程序员提供了不少语法糖,注解就是其中之一,Thinking in JAVA 第四版调侃说这是迫于来自C#等语言的特性不得不做出的改变。
注解早在J2SE1.5就被引入到Java中,主要提供一种机制,这种机制允许程序员在编写代码的同时可以直接编写元数据。
解释何为注解的最佳方式就是元数据这个词:描述数据自身的数据。注解就是代码的元数据,他们包含了代码自身的信息。
注解可以被用在包,类,方法,变量,参数上。自Java8起,有一种注解几乎可以被放在代码的任何位置,叫做类型注解。我们将会在后面谈到具体用法。
被注解的代码并不会直接被注解影响。这只会向第三系统提供关于自己的信息以用于不同的需求。
注解会被编译至class文件中,而且会在运行时被处理程序提取出来用于业务逻辑。当然,创建在运行时不可用的注解也是可能的,甚至可以创建只在源文件中可用,在编译时不可用的注解。
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 Anno1 {//注解的变量,并且指定默认属性值boolean beNull() default false;int minVal() default 0;int maxVal() default Integer.MAX_VALUE;}
@Getter@Setterpublic class AnnotationTest extends BaseLogger implements Serializable {private static final long serialVersionUID = 946475120194720568L;@Anno1(beNull = true)private String name;@Anno1(minVal=18)private Integer age;@SuppressWarnings("unchecked")public <T> T validateAnno(String param, Class<T> clazz) throws Exception{T test = (T)JSONObject.toBean(JSONObject.fromObject(param), clazz);//AnnotationTest test = new AnnotationTest();//testNull(test);for (Field f : test.getClass().getDeclaredFields()) {f.setAccessible(true);Anno1 anno1 = f.getAnnotation(Anno1.class);if( null != anno1){if( f.getType().equals(String.class) ){if(!anno1.beNull()){if(null == f.get(test) || "".equals(f.get(test))){throw new Byron4jEcxeption(f.getName() + " 参数不能为空");};}}else if(f.getType().equals(Integer.class)){if(f.get(test) == null){throw new Byron4jEcxeption(f.getName() + " 参数不能为空");}Integer val = Integer.valueOf(String.valueOf(f.get(test)));if( val <= anno1.minVal() || val >= anno1.maxVal() ){throw new Byron4jEcxeption(f.getName() + " 参数应该大于" + anno1.minVal());}}}else{String value = String.valueOf(f.get(test));value = value.trim();if(f.getType().equals(String.class)){f.set(test, value);}if( null == value || "".equals(value) || "null".equals(value)){throw new Byron4jEcxeption(f.getName() + " 参数不能为空");}}}return test;}@Testpublic void testAnno(){String param = "{\"name\":\"\",\"age\":15}";try {System.out.println(validateAnno(param, AnnotationTest.class));} catch (Exception e) {log.error(e.getMessage());e.printStackTrace();}}@Deprecatedpublic static void testNull(AnnotationTest test) {System.out.println(JSONObject.fromObject(test).toString());}}
0 0
- java注解讲解与实用示例
- java注解详细讲解
- Jquery Validation实用示例及讲解
- JAVA 注解示例 详解
- JAVA 注解示例 详解
- JAVA 注解示例 详解
- JAVA 注解示例 详解
- java注解示例 详解
- Java 注解示例
- JAVA注解示例
- JAVA注解示例
- JAVA 注解示例
- JAVA 注解示例
- JAVA 注解示例 详解
- JAVA注解示例详解
- JAVA 注解示例 详解
- java注解简单示例
- JAVA 注解示例 详解
- Hibernate主键生成策略
- NYOJ 组合数
- 有向图的拓扑排序
- 设计模式之迭代器模式
- JS的基础类型与引用类型
- java注解讲解与实用示例
- oracle的表分区
- HTML5 语义元素
- mysql之delete删除记录后数据库大小不变
- 【C#】32. 使用EF(EntityFramework)连接Mysql,MVC开发
- 【一天一道LeetCode】#104. Maximum Depth of Binary Tree
- java基础知识之常量与变量
- 【leetcode】234. Palindrome Linked List
- Windows下的SVN安装及使用