Índice
4. Arquitetura de anotação (introdução aos parâmetros de meta-anotação)
1. Definição de anotação
As anotações são usadas para associar qualquer informação ou metadados (metadados) a elementos do programa (classes, métodos, variáveis de membro, etc.). É um tipo de explicação, configuração e informação descritiva, que não tem nada a ver com o negócio específico e não afetará a lógica normal do negócio. Anotações são usadas como tags em programas Java, e existem programas específicos para descobrir tags
2. Definição de meta anotação
Meta-anotações são anotações especialmente usadas para anotar outras anotações. Parece um pouco complicado, mas na verdade são anotações fornecidas especialmente para anotações personalizadas. java.lang.annotation fornece quatro meta-anotações:
- @Documented – se a anotação será incluída no JavaDoc
- @Retenção – quando usar esta anotação
- @Target – onde a anotação é usada
- @Inherited – Se deve permitir que subclasses herdem a anotação
- @Repeatable - Se a anotação pode ser repetida, introduzida por jdk1.8
3. Anotações personalizadas (anotações personalizadas com o mesmo nome substituirão as anotações originais)
Criar uma nova classe de anotação
@Documented//Descreve que a anotação pode aparecer no javadoc @Target(ElementType.TYPE)//Especifica o tipo de Herdado como ElementType.TYPE. @Retention(RetentionPolicy.RUNTIME)//A política que especifica Inherited é RetentionPolicy.RUNTIME @Inherited//A anotação marcada por ele terá herança. public @interface Minha anotação1 { }
4. Arquitetura de anotação (introdução aos parâmetros de meta-anotação)
①, (01) Uma anotação está associada a uma RetentionPolicy . Pode ser entendido como: todo objeto Annotation terá um atributo RetentionPolicy único.
(02) 1 Annotation está associada a 1~n ElementTypes . Pode ser entendido como: Para cada objeto Annotation, podem existir vários atributos ElementType.
(03) A anotação possui várias classes de implementação, incluindo: Deprecated, Documented, Inherited, Override e assim por diante. Cada classe de implementação de Annotation é "associada a 1 RetentionPolicy" e "associada a 1~n ElementTypes".
②, Anotação é uma interface.
"Cada anotação" está associada a "1 RetentionPolicy" e associada a "1~n ElementType". Pode ser facilmente entendido como: todo objeto Annotation possui um atributo RetentionPolicy exclusivo; quanto ao atributo ElementType, existem 1~n.
③ ElementType é um tipo de enumeração Enum, que é usado para especificar o tipo de anotação.
"Cada anotação" está associada a "1~n ElementTypes". Quando Annotation está associado a um ElementType, significa: A anotação tem um determinado propósito.
- ElementType.TYPE: classe, interface, anotação, enum
- ElementType.CONSTRUCTOR: Construtor
- ElementType.FIELD: constantes de variáveis de membro, objetos, propriedades, enumerações
- ElementType.LOCAL_VARIABLE: variável local
- ElementType.METHOD: método
- ElementType.PACKAGE: 包
- ElementType.PARAMETER: parâmetro
- ElementType.ANNOTATION_TYPE): Anotação
- ElementType.TYPE_PARAMETER: parâmetro de tipo, indicando que esta anotação pode ser utilizada antes da declaração de Type, introduzida por jdk1.8.
- ElementType.TYPE_USE: Uma anotação do tipo, indicando que esta anotação pode ser usada em todos os lugares onde o Type é usado (como: genéricos, conversão de tipo, etc.), introduzido por jdk1.8.
④. RetentionPolicy é um tipo de enumeração Enum, que é usado para especificar a estratégia (tipo) de anotação. Em termos leigos, o escopo da anotação de diferentes tipos de RetentionPolicy é diferente.
a. Se o tipo da anotação for SOURCE , significa que a anotação só existe durante o processamento do compilador. Após o processamento do compilador, a anotação é inútil. Por exemplo, o sinalizador "@Override" é uma anotação. Quando ele modifica um método, significa que o método substitui o método da classe pai; e a verificação da sintaxe será realizada durante a compilação! Depois que o compilador terminar o processamento, "@Override" não terá efeito.
b) Se o tipo de anotação for CLASS , significa: o compilador armazena a anotação no arquivo .class correspondente à classe, que é o comportamento padrão da anotação.
c. Se o tipo de anotação for RUNTIME , significa: o compilador armazena a anotação na classe