El tiempo de ejecución del método de impresión basada en log para lograr AOP

El tiempo de ejecución del método de impresión basada en log para lograr AOP

breve 1.Aop

Resorte del marco AOP es la programación orientada a aspectos pensamiento, usando AOP llama técnica de "cruz", los procesos de negocio multi-funcionales implican extracción general e individualmente envasada para formar una sección separada, en el momento adecuado estas facetas corte transversal procesos de negocio a la posición especificada (Baidu)

2. breve comentario

Creo que utilizamos en el desarrollo diario de muchas anotaciones, tales como el común @Controller @Service @Autowired, etc., entonces depende de usted para definir una nota de ella? Siguiente es un ejemplo breve introducción:

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Performance {
    String functionName() default "";
    String jobKey() default  "";
}

Anotación @Target ilustra el rango diana modificado: Anotación se puede usar para paquetes, tipos (clases, interfaces, enumeraciones, tipo de anotación), un tipo miembro (método, constructor, variables miembro valor enumerado), y los parámetros del método variables locales (por ejemplo, variable de bucle, parámetros de captura). Utilice un objetivo en la declaración de tipo de anotación puede ser más claro que el objetivo modificado

ciclo de vida de impresión @Retention se puede dividir en tres categorías:
. 1, RetentionPolicy.SOURCE: Sólo puede haber retenido en el archivo de origen, cuando se compila el archivo de clase Java en un archivo, la anotación abandonada;
2, RetentionPolicy.CLASS: anotación a ser retenido archivos de clase, pero los archivos de clases JVM carga cuando fueron abandonados, que es el ciclo de vida por defecto;
3, RetentionPolicy.RUNTIME: apuntes de clase no sólo pueden guardar en un archivo y luego cargar los archivos de clases JVM todavía existen;

@Documented notas indican que este javadoc herramientas de anotación debe ser registrada. Por defecto, javadoc no incluye anotaciones. Sin embargo, si las notas sentencia especificada @Documented, será tratado como herramienta javadoc, también señala el tipo de información se incluye en el documento generado, es una anotación de marcador, no hay miembros
(más que el concepto del autor ingreso Baidu, si por favor señalar el error)
y el tipo de declarar @interface, que puede definir parámetros ejemplos han mostrado.
sí notas también es compatible con una serie de otros meta-anotación, Dime lo que está interesado puede encontrar su propio camino de ello, sólo estaba en esta sencilla aplicación.

código específico 3.AOP

@Aspect
@Component
public class PerformanceAspect {

    @Pointcut("@annotation(com.xx.xx.xx.Performance)")
    public void pointCut(){ }

    @Around("pointCut()")
    public void doBefore(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        MethodSignature signature = (MethodSignature) proceedingJoinPoint.getSignature();
        Performance annotation = signature.getMethod().getAnnotation(Performance.class);
        String functionName = annotation.functionName();
        if(functionName.isEmpty()){
            functionName = signature.getMethod().getName();
        }
        String jobKey = (String) AspectSupportUtils.getKeyValue(proceedingJoinPoint,annotation.jobKey());
        long start = System.currentTimeMillis();
        try {
             proceedingJoinPoint.proceed();
        }catch (Exception e){
             LogUtil.exception(e);
        }
        long end = System.currentTimeMillis();
        long timeUse = end - start;
        LogUtil.debug(" service :  " + functionName + jobKey+"  use time: "+timeUse+" ms");
    }

}

@Aspect declarada como una sección de clase

 @Pointcut("@annotation(com.znv.datacenter.annoations.Performance)")
    public void pointCut(){ }

anotación de la expresión @Pointcut hay muchos apoyo y ejecución, son Baidu lata interesados, estoy aquí en nombre de mis comentarios, donde interceptación

El siguiente método principal

@Before:. Identificar un pre-mejora, que es funciones BeforeAdvice equivalentes
@After:. Final mejorada, si se está lanzando una excepción o salida normal será ejecutado
@AfterReturning: Enhanced posterior, similar a AfterReturningAdvice, realizar un método salidas normalmente.
@AfterThrowing: mayor excepción es lanzada, el equivalente a ThrowsAdvice.
@Around: mejoras de sonido envolvente, el equivalente a MethodInterceptor.

La lógica es simple, obtener el nombre del método y, a continuación, antes y después de la implementación de métodos para interceptar la fecha y hora de la impresión del registro de la última llamada.
¿Cuál de los siguientes métodos es llamar a las notas donde sí misma.

 proceedingJoinPoint.proceed();

Cuando se utiliza en un método para añadir comentarios

   @UseTemporaryDatabases
    @Performance(functionName = "database import operation job with jobkey : ", jobKey = "#jobKey")
    public void importData(List<Map> tableStructureList, String jobKey) throws Exception {
        DataSourceContextHolder.setDBType("temporarySource");
        //拼接数据库名的转义
        String tableName = "`" + jobKey + "`";
        dataCollectionMapper.importData(tableStructureList, tableName);
    }

¿Qué debe tenerse en cuenta es jobKey este parámetro usando las expresiones SPRINGEL.
SPRINGEL expresión es muy fuerte, @Valor común ( "$ {} xxx" ) es el uso de una actuación, pero propia realización de las notas que desea utilizar la expresión SPRINGEL, la necesidad de añadir clases adicionales. En concreto se refieren a los siguientes enlaces: muelle de soporte de anotación personalizada EL expresiones .

Publicó un artículo original · ganado elogios 0 · Vistas 3

Supongo que te gusta

Origin blog.csdn.net/qq_41696539/article/details/105047412
Recomendado
Clasificación