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映射关系");        }    }}
原创粉丝点击