java注解

@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(),在使用时候可以忽略成员名和赋值号“=";
    注解类可以没有成员,没有成员的注解称为标识注解;


![这里写图片描述](https://img-blog.csdn.net/20171222112320672?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamo1NDY2MzA1NzY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)



4、使用自定义注解
    ![这里写图片描述](https://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映射关系");
        }
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值