Tutorial de uso de la anotación aop de Springboot

1. Es fácil abrir un aop usando anotaciones en springboot

@Aspect 
@Order (1) 
@Componente

@Aspect: open aop, @Component: necesita ser escaneado, habilitar esta clase, @Order: hay muchos aops iniciados, esto puede coordinar el orden de configuración

2. Se incluyen seis anotaciones de uso común

@Pointcut ("")

Defina el punto de entrada: defina un método en lugar del método que debe hacerse.

Por ejemplo, ahora quiero que aop rodee el método A con B y C. ¿Cómo reemplazar el método A? Utilice el punto de entrada en su lugar, el punto de entrada es este método de aspecto.

Con este método, puede hacer aop, el aop tiene la orden antes de que se ejecute el método, cuando se ejecuta el método, después de que se ejecuta el método, la ejecución se completa normalmente y la ejecución se completa con excepción

Hay cinco notas correspondientes y el nombre es más fácil de entender.

@ Antes , @ Alrededor, @ Después , @ DespuésReturn, @ AfterThrowing

Los valores de estas anotaciones son la ruta del paquete del método de definición @Pointcut ("") . Hagamos un repaso en este punto de entrada.

Tenga en cuenta el problema: @Around puede reemplazar a @Before y @After

3. Orden de uso

Simplemente enumero todas las anotaciones y miro el orden del proceso de ejecución de esta manera:

@Alrededor -》 @ Antes -》 @ Después -》 @ DespuésReturn -》 @ AfterThrowing

(1) ProceedingJoinPoint.proceed () de retorno se llama en @Around. Este método se llama varias veces y el método se ejecutará varias veces

@Around(value = "com.fast.framework.aop.pointcut.SystemArchitecture.logPointCut()")
    public Object around(ProceedingJoinPoint point) throws Throwable {
        logger.info("around");
        return point.proceed();
    }

Ver registro de prueba

15:37:54.865 INFO  com.fast.framework.aop.LogAop 60 around - around
15:37:54.866 INFO  com.fast.framework.aop.LogAop 44 before - before
执行切面方法
815:37:55.034 INFO  com.fast.framework.aop.LogAop 66 after - after
15:37:55.034 INFO  com.fast.framework.aop.LogAop 71 afterReturning - afterReturning
15:37:55.035 INFO  com.fast.framework.aop.LogAop 76 afterThrowing - afterThrowing

Secuencia: @Around -》 @ Antes -》 Método de aspecto ejecutivo -》 @ Después -》 @ AfterReturning -》 @ AfterThrowing

(2) Llamado durante el método @Around

 @Around(value = "com.fast.framework.aop.pointcut.SystemArchitecture.logPointCut()")
    public Object around(ProceedingJoinPoint point) throws Throwable {
        logger.info("around start");
        Object proceed = point.proceed();
        logger.info("around end");
        return proceed;
    }

Registro de salida

18:40:52.260 INFO  com.fast.framework.aop.LogAop 60 around - around start
18:40:52.261 INFO  com.fast.framework.aop.LogAop 44 before - before
执行切面方法
818:40:52.413 INFO  com.fast.framework.aop.LogAop 62 around - around end
18:40:52.414 INFO  com.fast.framework.aop.LogAop 68 after - after
18:40:52.415 INFO  com.fast.framework.aop.LogAop 73 afterReturning - afterReturning
18:40:52.415 INFO  com.fast.framework.aop.LogAop 78 afterThrowing - afterThrowing

Secuencia: @Around Start -》 @ Before -》 Ejecución del método de aspecto -》 @ Around End -》 @ After -》 @ AfterReturning -》 @ AfterThrowing

Se puede ver que la vuelta comienza antes antes y termina después antes .

4. Obtenga información sobre el método de tejido.

1.JoinPoint

2.ProceedingJoinPoint  

3. LocalVariableTableParameterNameDiscoverer Obtener el nombre del parámetro del método: para obtener más información, consulte: https://blog.csdn.net/Mint6/article/details/94991183

JoinPoint y ProceedingJoinPoint son casi lo mismo. Para conocer algunos métodos de uso, consulte: https://blog.csdn.net/Mint6/article/details/92121845

5.aop pasos generales

El uso de 1234 se refiere a los pasos anteriores

Use 1 para abrir el aop-- " Use 2 para definir el punto de entrada @Pointcut (" "), cinco anotaciones secuenciales para escribir el proceso aop general--" Use 4 para obtener la información del método de aspecto y realizar el aspecto.

 

Adjunto: El método @Around necesita devolver manualmente el valor de retorno y devolver el resultado de ejecución de ProceedingJoinPoint.proceed () o ProceedingJoinPoint.proceed (), pero debe devolverse, de lo contrario aop intercepta este método de forma predeterminada y no tiene valor de retorno .

Supongo que te gusta

Origin blog.csdn.net/Mint6/article/details/94994696
Recomendado
Clasificación