Si no hay métodos y tareas para leer anotaciones, las anotaciones no serán más útiles que las anotaciones. Se crea una parte importante del proceso de uso de anotaciones utilizando el procesador de anotaciones. Javase5 extiende la API del mecanismo de reflexión para ayudar a los programadores a construir rápidamente procesadores de anotación personalizados.
Biblioteca de clase de procesador anotado (java.lang.reflect.annotatedElement):
Java utiliza la interfaz de anotación para representar la anotación frente al elemento del programa, que es la interfaz principal de todos los tipos de anotación. Además, Java ha agregado una interfaz anotada en el paquete java.lang.reflect. Esta interfaz representa elementos del programa que pueden aceptar anotaciones en el programa. La interfaz tiene principalmente las siguientes clases de implementación:
Clase: definición de clase
Constructor: definición del constructor
Campo: definición de variable de miembro acumulativo
Método: Método Definición de clase
Paquete: definición de paquete de clase
El paquete java.lang.reflect contiene principalmente algunas clases de herramientas que implementan funciones de reflexión. De hecho, todas las API de reflexión proporcionadas por el paquete java.lang.reflect amplían la capacidad de leer información de anotación de tiempo de ejecución. Cuando un tipo de anotación se define como una anotación en tiempo de ejecución, la anotación solo puede ser visible en tiempo de ejecución, y la anotación guardada en el archivo de clase cuando el archivo de clase se cargue será leído por la máquina virtual.
La interfaz AnnotatedElement es la interfaz principal de todos los elementos del programa (clase, método y constructor). Por lo tanto, después de que el programa obtiene el objeto anotado de una determinada clase a través de la reflexión, el programa puede llamar a los siguientes cuatro métodos del objeto para acceder a la información de anotación:
Método 1: <TextendSannotation> tgetAnnotation (clase <t> AnnotationClass): Devuelve una anotación del tipo especificado que existe en el elemento del programa. Si la anotación del tipo no existe, regrese nulo.
Método 2: Anotación [] getAnnotations (): Devuelve todas las anotaciones que existen en el elemento del programa.
Método 3: booleanisAnnotationPresent (class <? ExtendSnotation> AnnotationClass): determina si el elemento del programa contiene anotaciones del tipo especificado. Si existe, devolverá verdadero, de lo contrario devolverá falso.
Método 4: Annotación [] getDeclaredAntations (): Devuelve todos los comentarios que existen directamente en este elemento. A diferencia de otros métodos en esta interfaz, este método ignora las anotaciones hereditarias. (Si no existe ningún comentario directamente en este elemento, se devuelve una matriz de longitud cero). El llamado del método puede modificar la matriz devuelta a voluntad; Esto no tendrá ningún efecto en la matriz devuelta por otras personas que llaman.
Un procesador de anotación simple:
/*********************** Declaración de anotación *********************** // ***Annotación de nombre de fruta*@author peida**/ @target (elementtype.field) @retention (retentionPolicy.runTime) @documentpublic @interface frutitName {string valor () predeterminado ";}/***fruit color annotation*@author*******@autor @aauthor* */ @Target (elementType.field) @Retention (retentionPolicy.runtime) @DocumentedPublic @interface fruitColor {/** * color enum * @author peida * */public enum color {bule, rojo, verde};/** * color atributo * @return */color frutscolor () Color.green;}/** * ... fruta * * * @return */color frutitcolor () predeterminado Color.green;}/** ** * ... fruta * * * @return */color frutitcolor () predeterminado Color.green;}/** ** * ... fruta * * * @return */color frutitcolor () predeterminado Color.green;}/** ... peida**/ @target (elementtype.field) @retention (retentionPolicy.runtime) @documentedpublic @interface frreutProvider {/*** Número de proveedor* @return*/public int id () predeterminado -1;/*** Nombre del proveedor* @return*/public String Name () predeterminado ";/*** Dirección del proveedor* @return*/dirección pública () Nombre del proveedor () Nombre del proveedor*/public String Nombre () predeterminado";/*** Dirección del proveedor* @@return*/dirección pública () Nombre del proveedor () "";}/****************** La anotación usa ************************/public class Apple {@FruitName ("Apple") Private String Applename; @FruitColor (fruitColor = Color.Red) String private AppleColor; @FruitProvider (id = 1, nombre = "Shaanxi Hongfuji Group", dirección = "Building HongFuilt," Building HongFuilt ,. 89, Yan'an Road, Xi'an City, Shaanxi Province ") String privado AppleProvider; public void setApplecolor (String AppRecolor) {this.appLecolor = APPLECOLOR;} public String getApplePLecolor () {return Applecolor;} public Void SetAppLenEn getAppleName() {return appleName;}public void setAppleProvider(String appleProvider) {this.appleProvider = appleProvider;}public String getAppleProvider() {return appleProvider;}public void displayName(){System.out.println("The name of the fruit is: apple");}}/******************Annotation Procesador *****************************/public class FruitInfoutil {public static void getFruitInfo (class <?> clazz) {String strfruitname = "Fruit Name:"; string strfruitColor = "fruts color:"; string strufruitProvicer = "información de proveedor:"; campo [] campos = clazz.getDeclaredffields (); : Fields) {if (Field.IsannotationPresent (fruitname.class)) {fruitname frutsname = (fruitname) Field.getAnnotation (frutsname.class); strfruitname = strfruitname+frutsname.value (); system.out.println (strfruitName);} if (Field.IsannotationPresent (fruitColor.class)) {fruitColor frutsColor = (frutsColor) Field.getAnnotation (fruitColor.class); struitcolor = strfruitcolor+frutscolor.fruitcolor (). toString (); system.out.println (struitcolor);};};};} if (Field.IsannotationPresent (fruitProvider.class)) {fruitProvider frutsProvider = (fruitProvider) Field.getAnnotation (fruitProvider.class); strfruitProvicer = "Número de proveedor:"+frutsProvider.id ()+"Nombre del proveedor:"+frutsprovider.name ()+"Dirección del proveedor: la dirección del proveedor::" "+fruitProvider.address (); system.out.println (strfruitprovicer);}}}}/***************** Resultado de salida *******************************************/public {FruitInfoutil.getFruitInfo (Apple.class);}} ========================================================= Nombre de fruta: Número de frutas: Número de proveedor rojo: 1 Nombre del proveedor: SHAANXI HONGONGFUJI DIRECCIÓN: DIRECCIÓN: DIRECCIÓN DE SHAANXI FFUJI Edificio Hongfuji, No. 89, Yan'an Road, Ciudad Xi'an, provincia de ShaanxiBásicamente he leído los puntos de conocimiento básico de las anotaciones de Java (ver el mapa a continuación). En el siguiente artículo, diseñamos un marco ORM simple basado en anotaciones para aplicar y profundizar de manera integral la comprensión y la aplicación de varios puntos de conocimiento de las anotaciones.
Resumir
Lo anterior se trata de los simples ejemplos del procesador de anotación Java en este artículo, espero que sea útil para todos. Los amigos interesados pueden continuar referiéndose a otros temas relacionados en este sitio. Si hay alguna deficiencia, deje un mensaje para señalarlo. ¡Gracias amigos por su apoyo para este sitio!