java注解
来源:互联网 发布:delphi 算法 编辑:程序博客网 时间:2024/06/08 14:10
@Override:复写、覆盖父类方法@Deprecated:方法已经过时了1、普通引入类与注解:1.1 普通的引入类使用:![这里写图片描述](http://img.blog.csdn.net/20171222110022575?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamo1NDY2MzA1NzY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)1.2使用注解![这里写图片描述](http://img.blog.csdn.net/20171222110154664?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamo1NDY2MzA1NzY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)2、注解分类 2.1 源码注解:只在源码中存在,编译成.class后就不存在了 2.2 编译时注解:在源码与.class中存在(比如@Override,编译时候就检查等) 2.3 运行时注解:运行阶段还会起作用,甚至影响程序运行的结果逻辑(@Autowired, 程序运行自动注入)3、自定义注解 ![这里写图片描述](http://img.blog.csdn.net/20171222111054366?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamo1NDY2MzA1NzY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)【注】: 成员类型受限制,合法类型包括,原始类型、String、Class、Annotation、Enumeration; 如果注解只有一个成员,成员名必须是value(),在使用时候可以忽略成员名和赋值号“="; 注解类可以没有成员,没有成员的注解称为标识注解;![这里写图片描述](http://img.blog.csdn.net/20171222112320672?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamo1NDY2MzA1NzY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)4、使用自定义注解 ![这里写图片描述](http://img.blog.csdn.net/20171222112459138?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamo1NDY2MzA1NzY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)5、解析注解 文件Child.java: package com.study; @Description("I am a class") public class Child{ @Description("I am a function") public void sing() { } } =============================================================================== 文件main.java: import java.lang.annotation.Annotation; import java.lang.reflect.Method; public class Demo { public static void main(String[] args) { try{ Class c = Class.forName("com.study.Child"); //1、获取类注解 boolean isBool = c.isAnnotationPresent(Description.class); if(isBool){ Description d = (Description)c.getAnnotation(Description.class); System.out.println(d.value()); //打印注解 } //2、获取方法注解 //2.1 获取方法注解(方法一) Method[] ms = c.getMethods(); for (Method m : ms){ boolean isBoolTwo = m.isAnnotationPresent(Description.class); if(isBoolTwo){ Description d2 = (Description)m.getAnnotation(Description.class); System.out.println(d2.value()); } } //2.2获取方法注解(方法二) Method[] ms2 = c.getMethods(); for (Method m : ms2){ Annotation[] annotations = m.getAnnotations(); for(Annotation annotation:annotations){ if(annotation instanceof Description){ System.out.println(((Description) annotation).value()); } } } }catch (Exception e){ e.printStackTrace(); } } }6 子类继承父类(注意不是接口,接口注解不会集成)的时候,会继承父类的注解,不会继承父类方法的注解7、自己实现注解,字段映射表:package com.lxj.test;import java.lang.reflect.Field;import java.lang.reflect.Method;public class Demo { public static void main(String[] args) { StringBuffer sb = new StringBuffer(); sb.append("select * from "); Filter f = new Filter(); f.setEmail("xxxxx@qq.com,111@qq.com"); f.setId(1); f.setNickname("aaa"); Class c = f.getClass(); boolean isBool = c.isAnnotationPresent(Table.class); if(isBool){ Table table = (Table)c.getAnnotation(Table.class); String tableName = table.value(); sb.append(tableName).append(" WHERE 1=1"); if(tableName != "" && tableName != null){ Field[] fields = c.getDeclaredFields(); for(Field field:fields){ boolean isBolean = field.isAnnotationPresent(Column.class); if(!isBolean){ continue; } //获取当前列的表名字 Column column = field.getAnnotation(Column.class); String columnName = column.value(); //获取类中映射的字段属性 String fieldName = field.getName(); //获取该字段对用的值 ,通过方法getXxx() String getMethodName = "get"+fieldName.substring(0,1).toUpperCase() +fieldName.substring(1); Object fieldValue = null; try { Method getMethod = c.getMethod(getMethodName); fieldValue = getMethod.invoke(f); //取出来该字段对应的值 if(fieldValue == null){ //如果该字段没有值就过 continue; } sb.append(" and `"); if(fieldValue instanceof String){ if(((String) fieldValue).contains(",")){ sb.append(columnName).append("` in ").append("("+ fieldValue + ")"); }else{ sb.append(columnName).append("`=").append( "'"+ fieldValue + "'"); } }else{ sb.append(columnName).append("`=").append(fieldValue); } } catch (Exception e) { e.printStackTrace(); } } System.out.println( sb.toString()); }else{ System.out.println("表名为空"); } }else{ System.out.println("不存在Table映射关系"); } }}
阅读全文
0 0
- Java注解-自定义注解
- Java注解----自定义注解
- Java注解自定义注解
- Java注解--四种元注解
- Java注解-三种內建注解
- 【Java】【注解】自定义注解
- java注解
- java注解
- java注解
- java 注解
- Java注解
- java 注解
- Java 注解
- Java注解
- java 注解
- JAVA注解
- Java注解
- Java注解
- centos6.5 系统安装 git
- Use youtube-dl下载YouTube视频
- Oracle全家桶(VirtualBox+OEL+Oracle11gR2)快捷搭建数据库服务器
- Go语言_Go_Golang 逐行读取文件
- Grafana最新版本4.3.1安装(后端使用mysql)
- java注解
- database:mysql.h: No such file or directory
- 实时改变配置文件的思路
- 蓝桥杯 特殊回文数
- DPDK 多进程支持总结
- 理解spring父子容器
- RPN 区域推荐网络
- leetcode 670. Maximum Swap
- String、StringBuffer、StringBuilder区别