JAVA 注解
来源:互联网 发布:ms logo软件 编辑:程序博客网 时间:2024/05/22 00:03
注解的分类:(按照运行机制来分类)
1,源码注解
2,编译时注解(JDK自带注解: Override, Deprecated, Suppvisewarnings)
3,运行时注解 (在运行阶段起作用,可能会运行编译的逻辑,例如 Autowired)
按照来源分类:
1,JDK自带的注解
2,第三方的注解
3,自定义注解
自定义注解的语法:
成员类型是受限制的,只能是JAVA的8个基本类型,String,Class,Annotation,Enumberation。
可以没有成员,没有成员的注解称为标记注解。
public @interface Table {//用关键字@interface,成员以无参无异常的方式声明/** * 成员以无参无异常的方式声明 * @return */String dec();/** * 只有一个成员时用规定用value(用其它的也不会报错) * @return */String value();/** * 可以用default设置一个默认值 * @return */int age() default 18;}
元注解:
1,注解的作用域
@Target ()
值:ElementType.Method 方法声明
ElementType.CONSTRUCTOR 构造方法声明
ElementType.FIELD 字段声明
ElementType.LOCAL_VARIABLE 局部变量声明
ElementType.PACKAGE 包声明
ElementType.PARAMETER 参数声明
ElementType.TYPE 类,接口声明
2,注解的生命周期
@Retention()
值:RetentionPolicy.SOURCE 只在源码中显示,编译时会丢弃
RetentionPolicy.CLASS 编译时会记录到CLASS中,
RetentionPolicy.RUNTIME 运行时存在,可以通过反射来读取
3,允许被子类继承
@Inherited
4,生成JAVADOC时会包含注解
@Documented
注解的使用方法:
@<注解名>(<成员名1>=<成员值1>,<成员名2>=<成员值2>,......)
eg:
@Desc(desc="hello", name="tom", age=18)
解析注解:
概念:通过反射获取类、函数或成员上的运行时(生命周期为RUNTIME)注解信息,从而实现动态控制程序运行的逻辑
这是一个拼接sql的函数
public static String f(User user){StringBuffer sb = new StringBuffer();//获取类Class c = user.getClass();//判断类上是否有注解Tableboolean tExist = c.isAnnotationPresent(Table.class);if(!tExist){return null;}Table t = (Table) c.getAnnotation(Table.class);//获取注解成员值sb.append("select * from ").append(t.value()).append(" where 1 = 1 ");//获取类的成员Field[] fArray = c.getDeclaredFields();//遍历成员for (Field field : fArray) {boolean fExist = field.isAnnotationPresent(Column.class);if(!fExist){continue;}//获取注解实例Column col = field.getAnnotation(Column.class);//获取注解成员值String columnName = col.value();String fieldName = field.getName();//获取类中成员的get方法名String methodName = "get"+fieldName.substring(0, 1).toUpperCase()+fieldName.substring(1, fieldName.length());Method m;Object columnValue;try {m = c.getMethod(methodName);//执行方法,获取类中的成员值columnValue = m.invoke(user);if(columnValue == null){continue;}sb.append(" and ").append(columnName).append(" = ");if(columnValue instanceof String){sb.append("'");}sb.append(columnValue);if(columnValue instanceof String){sb.append("'");}} catch (NoSuchMethodException | SecurityException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalArgumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch blocke.printStackTrace();}}return sb.toString();}
- Java注解-自定义注解
- Java注解----自定义注解
- Java注解自定义注解
- Java注解--四种元注解
- Java注解-三种內建注解
- 【Java】【注解】自定义注解
- java注解
- java注解
- java注解
- java 注解
- Java注解
- java 注解
- Java 注解
- Java注解
- java 注解
- JAVA注解
- Java注解
- Java注解
- 关于泛型的自我学习以及笔记
- csv转XML
- EF直接更新数据(不需查询)
- 7月27日-----正则表达式、线程
- C语言 static 的作用
- JAVA 注解
- hdu5326 树的子树节点个数 dfs
- OC中 static 与 const 的作用
- 终于搞定UIScrollView上的几个tableview和collection view之间切换的问题了
- hdoj3785寻找大富翁(优先队列)
- Leetcode# 66 Plus One
- HDU 1799
- APP设计标准干货
- NYOJ-开心的小明