Si ya está utilizando la programación Java y utilizando cualquier marco popular como Spring y Hibernate, entonces debe estar familiarizado con el uso de anotaciones. Cuando se trabaja con un marco existente, generalmente es suficiente usar su anotación. ¿Pero a veces tienes que crear tu propia necesidad de crear tu propia anotación?
No hace mucho, encontré una razón para crear una anotación, que era un proyecto que involucraba datos comunes almacenados en una variedad de bases de datos.
Descripción de la escena
El negocio tiene una variedad de bases de datos que almacenan los mismos datos, y tienen sus propias formas de actualización de datos. problema.
Sin embargo, antes de que comience el proyecto, el negocio necesita saber cuánto se puede sincronizar la distancia de los datos y hacer las enmiendas necesarias para que se sincronice. .
anotación
Después de un tiempo de escrutinio y algunas ideas, decidí usar anotaciones para impulsar la configuración de la comparación de datos y el procesamiento de informes. La configuración no se ocultará en un archivo en un cierto lugar de clases.
En el caso más simple, la anotación no es más que una marca, solo para proporcionar información que proporciona información sin la operación de la ejecución del código en sí mismo. son familiares, pero es posible que nunca tenga la necesidad de crear su propia anotación.
Aquí hay un ejemplo de este proyecto:
@Target (elementType.field) @retentionPolicy.Runtime) public @Interface Reconfield { /*** El valor indica que el valor de las fuentes especificadas debe compararse o se usará para mostrar valor o referencia dentro de una ejecución. Devuelve el valor si se debe comparar el valor predeterminado a verdadero. ) El valor predeterminado de RECONDISPLAYFORMAT.NATIVA; El valor indica la etiqueta que debe mostrarse en el informe para el incendio. ;}
Esta es la anotación principal de cómo funciona el proceso de comparación de datos de conducción. Discuta más tarde.
La anotación de @Target le permite especificar que su anotación debe usarse en ese elemento Java.
@Retention, que le permite especificar cuándo la anotación es efectiva.
Este proceso de verificación de datos ejecutará una consulta para cada base de datos y asignará los resultados al bean de entidad que muestra el bean de entidad de todos los campos para los tipos de registros comerciales específicos y su comparación de datos de ejecución de valor en cada base de datos. Algunos ejemplos para comprender cómo se utilizan estas anotaciones en diferentes configuraciones de comparación de datos.
Para verificar los valores existentes y solo coincidir con la coincidencia precisa de cada fuente de datos, solo necesita proporcionar una ID de campo y la marca del campo en el informe.
@Reconfield (id = customer_id, etiqueta = "ID de cliente") Private String CustomerId;
Para mostrar el valor encontrado en cada fuente de datos, pero sin ninguna comparación de datos, es posible que deba hacer el elemento CompareSources y establecer el valor en falso.
@Reconfield (id = name, etiqueta = "name", comparación = falso) nombre de cadena privada;
Para verificar el valor que se encuentra en la fuente de datos designada, no todas, puede usar ElementsOurCestocompare. De manera, algunos escenarios de datos que no se almacenan en cada fuente de datos se pueden procesar.
@Reconfield (id = private_placement_flag, etiqueta = "bandera de colocación privada", sourCeScompare = {Reconsource.legacy, ReconsoSource.pace} g privePlaconeFlag;
Ahora hemos satisfecho nuestras necesidades básicas, y necesitamos resolver el problema de implementar el campo especificado para las capacidades de comparación de datos complejas.
@Target (elementType.field) @Retention (retentionPolicy.Runtime) public @Interface ReconcustomRule { /*** El valor indica los parámetros utilizados para instantáneos de un procesador de reglas personalizado, el valor predeterminado no es parámetros. ] De parámetros para instanciar una ejecución personalizada,* /string [] params () predeterminada {}; del procesador de regla personalizado.*/class <?> procesador () predeterminado defaultreconrule.class;}
Es muy similar a las anotaciones anteriores. necesitará implementar una interfaz de regla universal.
Ahora echemos un vistazo al ejemplo de usar esta anotación.
En este ejemplo, utilizamos una regla personalizada que verifica si la bolsa de valores es de Estados Unidos. Registro.
@Reconfield (id = street_cusip, etiqueta = "street cusip", compareSources = false) @ReconCustomRule (procesador = skipnonusExChangeComparisonRule.class) ate string streetCusip;
Aquí especificamos un parámetro para las reglas personalizadas. Para aplicar el mismo conjunto de reglas personalizadas a múltiples campos.
@Reconfield (id = usd_mkt_cap, etiqueta = "Cap de mercado USD", DisplayFormat = ReconDisplayFormat.numeric_whole, SourCeStOcompare = {Reconsource.legacy, Reconsource.pace, Reconsource.bob_prcm})@ReconcustomRule (Processor = ToleReamOun 10000 "}) Private BigDecimal USDMKTCAP;
Como puede ver, solo utilizamos algunas anotaciones simples, y hemos diseñado una función de informe de verificación de datos con un considerable grado de flexibilidad para un escenario de biblioteca de datos múltiples. . Por lo tanto, en realidad usamos la anotación para calcular las entidades de datos de mapeo que se encuentran y las usan directamente para su procesamiento.