注解 annotation

1:作用

  特殊标记,这些标记可以在编译,类加载,运行时被读取(需要指定"作用时期")

2:元注解

  @Retention

    标记时期(编译,类加载,运行时),只能有1个

    RetentionPolicy.SOURCE      注解存在于源代码中,编译时会被抛弃
    RetentionPolicy.CLASS       注解会被编译到class文件中,但是JVM会忽略
    RetentionPolicy.RUNTIME     JVM会读取注解,同时会保存到class文件中

  @Target

    作用范围(类,构造器,属性,方法,参数....)  ,可以设置多个

   ElementType.TYPE             用于类,接口,枚举但不能是注解
   ElementType.FIELD            作用于字段,包含枚举值
   ElementType.METHOD           作用于方法,不包含构造方法
   ElementType.PARAMETER          作用于方法的参数
   ElementType.CONSTRUCTOR         作用于构造方法
   ElementType.LOCAL_VERIABLE       作用于本地变量或者catch语句
   ElementType.ANNOTATION_TYPE      作用于注解
   ElementType.PACKAGE           作用于包

  @Documented 

    用于指定该元annotation修饰的annotation类将被Javadoc工具提取成文档,就是你定义的注解有@Documented
    修饰,在自动提取API文档时,文档的方法会带有这个注解

  @Inherited

    该元annotation指定被它修饰的annotation将具有继承性,例如使用该元注解自定义的annotation,在修饰
      了一个类后,该类的子类则默认使用你自定义的注解

3:自定义注解

    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.FIELD,ElementType.METHOD})  //作用在字段上
    public @interface NeedSetValue {
      
      String value() default "zsc"; //有默认值的属性
    Class beanClass();
// 需要去哪个class中调用 (userName的属性从)     String method(); // 需要调用class中的哪个方法     String param(); // 调用方法的参数     String targetField(); //调用方法后需要哪个值(为了set到添加该注解的属性上) }

4:利用反射获取属性值(反射学习) https://www.cnblogs.com/draymond/p/12499841.html

5:aop+注解+反射  自动对数据库查询不到的值赋值

    (订单详情页面:订单信息+用户信息 

     单表查订单详情,没有用户信息的;使用代理的方式,自动注入用户信息)

    地址:待续

    本篇参考地址参考:https://www.jianshu.com/p/65ef3f59841f

                  https://www.runoob.com/w3cnote/java-annotation.html

原文地址:https://www.cnblogs.com/draymond/p/12499670.html