1. Java Annotaciones personalizadas y primavera
Las anotaciones de Java, como una especie de información de metadatos de los elementos del programa (clases, variables de miembros, métodos de miembros, etc.), no tienen impacto en la ejecución del programa en sí. A través de anotaciones personalizadas, puede agregar declaraciones especiales a los elementos del programa.
Como plataforma para construir aplicaciones de nivel empresarial, Spring ofrece funciones ricas. La combinación de las anotaciones personalizadas de Java con Spring para implementar el análisis y el procesamiento de anotaciones en escenarios específicos puede reducir el grado de acoplamiento de aplicaciones y mejorar la escalabilidad del programa.
2. Escenarios de aplicación
A continuación se resume varios escenarios de aplicación y solo explica la idea general (PD: No se han practicado todos los escenarios en el proyecto)
2.1 Iniciar sesión, bloqueo de permiso
En los proyectos web, la intercepción de inicio de sesión y la intercepción de permisos son una función cliché. A través de anotaciones de inicio de sesión personalizadas o anotaciones de permiso, anotaciones de análisis en el Interceptor personalizado para realizar funciones de inicio de sesión e intercepción de permiso.
Este método de uso tiene una configuración simple, alta flexibilidad y acoplamiento de código bajo.
2.2 Gestión de tareas de tiempo
Durante el proceso de construcción del sistema, habrá varios requisitos de tareas cronometradas, y la gestión centralizada de las tareas cronometradas puede mantener de manera más eficiente el funcionamiento del sistema.
Las anotaciones de tareas de sincronización personalizadas en el capítulo Repeting Annotations del documento oficial de anotación de Java pueden realizar la declaración de tareas de tiempo de los métodos comerciales. Combinado con el contenedor de Spring Postprocessor BeanPostprocessor (PS: el postprocesador de contenedores de primavera se discutirá en el próximo artículo), analizando anotaciones personalizadas. La información de anotación analizada se utiliza para construir la tarea de tiempo de tiempo de ejecución utilizando Quartzapi, que puede completar la creación de tiempo de ejecución y la gestión centralizada de la tarea de tiempo.
Este método puede evitar definir la configuración de las tareas de tiempo de cuarzo y mejorar la escalabilidad del sistema.
2.3 Especificación de origen de datos para enrutamiento de origen de datos múltiples
AbstrutingingDataSource proporcionado por Spring Implements Rointeing dinámico de múltiples fuentes de datos y se puede aplicar bajo una arquitectura de separación de esclavo maestro. Al especificar diferentes fuentes de datos para diferentes métodos, se realiza el enrutamiento dinámico de las fuentes de datos (por ejemplo: los métodos de lectura van desde la fuente de datos de la base de datos de esclavos, los métodos de escritura van a la fuente de datos de la base de datos principal). Cómo identificar el tipo de fuente de datos correspondiente a diferentes métodos se puede implementar utilizando anotaciones personalizadas. La función de enrutamiento de la fuente de datos se realiza analizando el tipo de fuente de datos correspondiente declarado en el método.
Este método evita el análisis de los métodos de coincidencia de patrones (por ejemplo: comenzando con seleccionar, comenzar con la actualización, etc.), y la declaración es más flexible.
Anotaciones personalizadas
Echemos un vistazo al ejemplo más simple. En el proceso de uso de aplicaciones SpringWeb, inevitablemente usamos @Controller, @Service, @Repository y otras anotaciones para definir Javabeans. Entonces, ¿cómo puedes definir una anotación tú mismo? El resorte puede cargarse automáticamente. Entonces está el primer ejemplo.
@Target ({elementType.type})@retención (retentionPolicy.runtime)@documented@componentPublic @Interface myComponent {String value () predeterminado ";} @ConfigurationPublic Public COMPONENTAnTationTest {public static void main (string [] args) {annotationConfigApplicationContext AnnotationConfigApplicationContext = new AnnotationConfigApplicationContext (); AnnotationConfigApplicationContext.Rregister (ComponentNoNTATATION.Class); AnnotationConfigApplicationContext.Refresh (); InyectClass injectClass = annotationConfigApplicationContext.getBean (injectClass.class); injectClass.print (); } @MyComponent public static class injectClass {public void print () {System.out.println ("Hello World"); }}}Ejecute este ejemplo y encontrará que la clase anotada por @MyComponent también está cargada por Spring y puede usarse normalmente como un Javabean ordinario. Al verificar el código fuente de Spring, encontrará que Spring usa classpathscanningcandiDateComponentProvider para escanear el paquete. Esta clase tiene tal anotación.
Un proveedor de componentes que escanea el ClassPath desde un paquete base. Luego se aplica excluyendo e incluye filtros en las clases resultantes para encontrar candidatos.
El método de registroDefaultFilters de esta clase tiene varias líneas de código
Protegido void registerDefaultFilters () {this.includeFilters.add (new AnnotationTypeFilter (componente.class)); ClassLoader cl = classpathScanningCandIdateComponentProvider.class.getClassLoader (); Pruebe {this.includeFilters.Add (New AnnotationTypeFilter ((((class <? Extiende la anotación>) classUtils.forname ("Javax.annotation.ManagedBean", cl)), falso)); logger.debug ("JSR-250 'javax.annotation.ManagedBean' encontrado y admitido para escaneo de componentes"); } Catch (ClassNotFoundException ex) {// JSR -250 1.1 API (como se incluye en Java EE 6) No disponible, simplemente omita. } try {this.includeFilters.Add (new AnnotationTypeFilter ((((class <? Extiende Annotation>) classUtils.forname ("javax.inject.named", cl)), falso)); logger.debug ("JSR-330 'javax.inject.neded' anotación encontrada y compatible para escaneo de componentes"); } Catch (ClassNotFoundException ex) {// JSR -330 API no disponible - Simplemente omita. }}Aquí encontrará que el uso de la información de la clase de escaneo de Spring solo juzgará la clase anotada por @Component, por lo que cualquier anotación personalizada puede ser escaneada por Spring e inyectado en el contenedor siempre que esté equipado con @Component (por supuesto, debe haber un valor predeterminado de Value () "";
Resumir
Lo anterior se trata de la breve discusión de este artículo sobre la aplicación de anotaciones personalizadas en primavera, 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!