美文网首页
Java基础-注解

Java基础-注解

作者: 舞动的代码 | 来源:发表于2017-11-30 19:42 被阅读0次
    什么是注解?
    • Jdk1.5新增新技术,注解。很多框架为了简化代码,都会提供有些注解。可以理解为插件,是代码级别的插件,在类的方法上写:@XXX,就是在代码上插入了一个插件。
      注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用。

      注解分类:内置注解(也成为元注解 jdk 自带注解)、自定义注解(Spring框架)

    为什么使用注解
    • JDK1.5新增注解、泛型、并发包(非并发编程)提高编程效率
    • 简化xml配置,例如:SpringBoot
    注解分类之内置注解
    • 元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明。Java5.0定义的元注解:
    • @Target:说明了Annotation所修饰的对象范围:Annotation可被用于 packages、types(类、接口、枚举、Annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。在Annotation类型的声明中使用了target可更加明晰其修饰的目标
      1. CONSTRUCTOR:用于描述构造器
      2. FIELD:用于描述域
      3. LOCAL_VARIABLE:用于描述局部变量
      4. METHOD:用于描述方法
      5. PACKAGE:用于描述包
      6. PARAMETER:用于描述参数
      7. TYPE:用于描述类、接口(包括注解类型) 或enum声明
    • @Retention:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(即:被描述的注解在什么范围内有效)
    自定义注解实现
    • 定义注解
      @Target(value = { ElementType.METHOD, ElementType.TYPE })
      @Retention(RetentionPolicy.RUNTIME)
      public @interface OneAnnotation {
        int beanId() default 0;
        String className() default "";
        String[]arrays();
      }
      
    • 使用注解
      @OneAnnotation(beanId = 123, className = "className", arrays = { "111", "222" })
        public void add() {
      
        }
      
    实现ORM框架映射
    • 定义注解接口
      @Retention(RetentionPolicy.RUNTIME)
      public @interface SetTable {
      
        String value();
      }
      
    • 自定义字段属性
      @Retention(RetentionPolicy.RUNTIME)
      public @interface SetProperty {
        String name();
            int leng();
      }
      
    • 自定义注解代码实现
      public class Main {
      
        public static void main(String[] args) throws ClassNotFoundException {
            // 1.反射class
            Class<?> classForName = Class.forName("com.entity.Sudent");
            // 2.获取表名称注解F
            SetTable setTable = classForName.getAnnotation(SetTable.class);
            // 3.获取所有的成员属性
            Field[] declaredFields = classForName.getDeclaredFields();
            StringBuffer sf = new StringBuffer();
            sf.append(" select ");
            String fromName = setTable.value();
            for (int i = 0; i < declaredFields.length; i++) {
                Field field = declaredFields[i];
                // 4.属性字段
                SetProperty sb = field.getAnnotation(SetProperty.class);
                sf.append(" " + sb.name() + " ");
                if (i == declaredFields.length - 1) {
                    sf.append(" from ");
                } else {
                    sf.append(" , ");
                }
            }
            sf.append(" " + fromName);
            System.out.println(sf.toString());
        }
      
      }
      

    相关文章

      网友评论

          本文标题:Java基础-注解

          本文链接:https://www.haomeiwen.com/subject/zvrbbxtx.html