• Java注解的使用


    Java注解的使用

    0)注解可修饰类的所有成员

     

    1)内置注解

    JDK所提供的注解,如下一些常用注解的使用:

    package com.annotation;
    
    /**
     * @author: 肖德子裕
     * @date: 2018/8/28 23:17
     * @description: 注解的使用(注解可修饰类的所有成员)
     * 选中注解名:ctrl+鼠标左键可以查看源代码
     * 在源代码中@Target表示该注解使用的范围
     * 内置注解:JDK所提供的注解
     */
    public class Demo1 {
        @Override
        public String toString() {
            return "";
        }
    
        @Deprecated
        public static void test() {
            //这个注解表示这个方法不建议使用,在调用时可以看见去除线
        }
    
        //@SuppressWarnings("all")
        //@SuppressWarnings("unchecked")
        @SuppressWarnings(value = {"unchecked", "deprecation"})
        public static void test1() {
            //这个注解表示去除这个方法的所有警告信息,有警告的话会有感叹号
            //第二个表示去除相应的警告信息
            //第三个表示去除相应的多个警告
        }
    
        public static void main(String[] args) {
    
        }
    }

     

    2)自定义注解(关键字@interface)

    package com.annotation;
    
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    /**
     * @author: 肖德子裕
     * @date: 2018/8/28 23:46
     * @description: 自定义注解(关键字@interface)
     * 元注解:注解其他注解
     * 光定义注解没什么用,还要通过反射解析注解才有意义
     * ORM:对象关系映射
     */
    @Target(value = ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface SxtAnnotation {
        //上面第一个元注解表示这个注解只能用于方法上
        //第二个一般用于反射,表示该注解在运行时有效
    
        //studentName()代表参数,如果注解处没有该参数会报错,所以一般会设置一个默认值
        //一般等于-1表示不存在
        String studentName() default "";
    
        int age() default 0;
    }

     

    package com.annotation;
    
    /**
     * @author: 肖德子裕
     * @date: 2018/8/28 23:51
     * @description:
     */
    public class Demo2 {
        @SxtAnnotation(studentName = "xdzy")
        public static void test() {
    
        }
    }

     

    3)注解的应用
    使用自定义注解表示类与表的关系

    package com.annotation;
    
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    /**
     * @author: 肖德子裕
     * @date: 2018/8/29 07:36
     * @description: 使用自定义注解表示类与表的关系
     */
    @Target(value = ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface SxtTable {
        //如果只有一个参数一般取名叫value
        String value();
    }

     

    对属性进行相关注解

    package com.annotation;
    
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    /**
     * @author: 肖德子裕
     * @date: 2018/8/29 07:40
     * @description: 对属性进行相关注解
     */
    @Target(value = ElementType.FIELD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface SxtField {
        String columnName();
    
        String type();
    
        int length();
    }

     

    在实体类里面的注解

    实体类例子

    package com.annotation;
    
    /**
     * @author: 肖德子裕
     * @date: 2018/8/29 07:34
     * @description: 使用自定义注解表示类与表的关系
     */
    @SxtTable("tb_student")
    public class SexStudent {
        @SxtField(columnName = "sid", type = "int", length = 10)
        private int id;
        @SxtField(columnName = "sname", type = "varchar", length = 10)
        private String name;
        @SxtField(columnName = "sage", type = "int", length = 3)
        private int age;
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    }

     

    4)使用反射读取注解信息,模拟处理注解信息的流程

    package com.annotation;
    
    import java.lang.annotation.Annotation;
    import java.lang.reflect.Field;
    
    /**
     * @author: 肖德子裕
     * @date: 2018/8/29 07:50
     * @description: 使用反射读取注解信息,模拟处理注解信息的流程
     */
    public class Demo3 {
        public static void main(String[] args) {
            try {
                Class clazz = Class.forName("com.annotation.SexStudent");
    
                //获取类的所有有效注解
                Annotation[] annotations = clazz.getAnnotations();
                for (Annotation annotation : annotations) {
                    System.out.println(annotation);
                }
    
                //获取指定的注解
                SxtTable st = (SxtTable) clazz.getAnnotation(SxtTable.class);
                System.out.println(st.value());
    
                //获取属性
                Field field = clazz.getDeclaredField("studentName");
                //获取指定属性的注解
                SxtField sxtField = field.getAnnotation(SxtField.class);
                System.out.println(sxtField.columnName() + sxtField.type() + sxtField.length());
    
                //在上面获取了注解的一些信息,就可以拼接sql语句,执行数据库操作
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

     

  • 相关阅读:
    非旋Treap——fhq treap
    LCA
    树链剖分
    复习计划
    BZOJ2565: 最长双回文串(回文树)
    回文自动机
    luogu P3796 【模板】AC自动机(加强版)
    【BZOJ2908】 又是nand
    【HDU2460】 Network
    【CF786B】 Legacy
  • 原文地址:https://www.cnblogs.com/xdzy/p/9552240.html
Copyright © 2020-2023  润新知