Vários tipos de notificação comuns e suas funções básicas no AOP:
@Before: Pré-notificação, executada antes da execução do método alvo.
@After: A pós-notificação, independentemente do resultado da execução do método (incluindo exceções), será executada após a execução do método de destino.
@AfterReturning: Notificação após retorno, executada após o método de destino terminar normalmente, mas não será executada se o método lançar uma exceção.
@AfterThrowing: Notificação de exceção, executada quando o método de destino lança uma exceção.
@Around: Notificação surround, você pode realizar operações personalizadas antes e depois da execução do método de destino e pode até decidir se deseja continuar executando o método de destino.
A diferença entre a ordem de execução AOP em Spring4 e Spring5
Ordem de execução AOP em Spring4
Sequência normal de execução:
@Before (pré-notificação)
execução do método alvo
@Depois (postagem de notificação)
@AfterReturning (notificação após retorno)
Sequência de execução de exceção:
@Before (pré-notificação)
Execução do método de destino (lança exceção)
@Depois (postagem de notificação)
@AfterThrowing (notificação de exceção)
Se a notificação surround (@Around) estiver configurada, o pré-processamento da notificação surround será executado antes de @Before, e o pós-processamento da notificação surround também será executado antes de @After, @AfterReturning e @AfterThrowing.
Ordem de execução AOP no Spring5
No Spring 5, a ordem de execução do AOP sofreu algumas alterações, refletidas principalmente na ordem de execução de @AfterReturning e @After:
Sequência normal de execução:
@Before (pré-notificação)
execução do método alvo
@AfterReturning (notificação após retorno)
@Depois (postagem de notificação)
Sequência de execução de exceção:
@Before (pré-notificação)
Execução do método de destino (lança exceção)
@AfterThrowing (notificação de exceção)
@Depois (postagem de notificação)
Se uma notificação de retorno (@Around) estiver configurada, a ordem de execução da notificação de retorno ainda será executar primeiro seu pré-processamento, depois a execução do método de destino, depois outras notificações (@AfterReturning, @AfterThrowing, @After) e, finalmente, o pós-processamento circundante de notificações.