zoukankan      html  css  js  c++  java
  • java annotation

    0 背景

       不同公司一般会使用不同的框架,而其框架中必然会使用到注解和反射。而注解的基础为元注解(修饰注解的注解),此处记录下对元注解的理解(针对jdk1.8)。

    1 元注解包含6个,如java.lang.annotation包下的 Documented、Inherited、Target、Retention、Repeatable及Native,其中 前四个为jdk1.5引入,后两个为jdk1.8引入,Native目前没有使用过,Target和Retention使用较简单,Documented、Inherited及Repeatable的使用存在疑惑,故此处记录一下最新理解,以备后用。

    2 通过官网解释、查询资料及实验,总结如下。

    2.1 Documented 

          被其修饰的非元注解(自定义注解和预定义注解),修饰程序中的元素时,如类、属性等。使用javadoc生成的API包含注解,展示的形式如源码。

    具体如下图所示(以修饰类的注解举例,修饰其他元素的注解类似):

    自定义注解Table

    自定义注解Table的使用

     javadoc生成API过程及结果

    2.2 Inherited

    Table注解被Inherited修饰,故被Table修饰的类可以被其子类继承。(元注解是不能被继承的,可以理解元注解只是解释说明一下自定义注解,元注解和自定义注解修饰的类没有关系。

    官方文档,说Inherited修饰的自定义注解,只有修饰类的时候,启子类才能继承。此处用Inherited修饰注解Field,用Field来修饰User类的属性,看子类SubUser是否能继承。结论,不能继承,和官网结论一致。

     

     

    2.3 Repeatable

    引入该注解之前,下图中的写法是错误的,ide编译通不过,即一个元素只能被同一个注解修饰一次。

     引入Repeatable之后,一个元素可以被同一个注解修饰多次。本质就是,把需要多次使用的注解,封装为一个新注解的属性,且该属性为该类型的数组。

    如下图:Service注解需要在同一元素重复使用,故将其封装为RepeatAnnotation注解的属性,且为Service[] 数组类型,且在Service中引入@Repeatable(RepeatAnnotation.class)

     代码中Repeatable修饰的注解Service的使用

     后续有新的理解,再更新记录。

    备注:本记录只做学习交流使用,不进行盈利性操作。

    参考:

    https://docs.oracle.com/javase/8/docs/api/index.html

    https://www.jianshu.com/p/df22b05d5573

    https://blog.csdn.net/u010979642/article/details/102855171

    https://www.bilibili.com/video/BV19W411R772?from=search&seid=152468195776095893

      

      

  • 相关阅读:
    文件上传及文件大小限制_学习笔记
    Java后台及Jsp前端的简单分页_学习笔记
    Java过滤器Filter的原理及配置_学习笔记
    Jsp入门EL表达式_学习笔记
    关于forName()、newInstance()、getMethod()、getClass()等区别的简略说明
    SQL语句查询某字段不同数据的个数(DISTINCT 的使用)
    C# 中delegate和event的区别
    java面试题(转)
    Servlet中的几个重要的对象(转)
    Spring 注解注入的几种方式(转)
  • 原文地址:https://www.cnblogs.com/hblthink/p/13872987.html
Copyright © 2011-2022 走看看