来自 Spring 的 @Afterreturning 建议在我将返回结果绑定到 AOP 时不起作用

@Afterreturning advice from Spring AOP doesn't work when I bind returning result to it

这是建议

@AfterReturning(
        pointcut = "execution(public java.util.List<me.mikholskiy.domains.Customer> me.mikholskiy.daos.CustomerDao.getAll())",
        returning = "resultList")
public void adviceBeforeGetAllCustomersFromDatabase(JoinPoint joinPoint,
                                                    List<Customer> resultList) {
    // ... 
}

因此,当我在没有 returning 参数的情况下使用此建议注释时,它会按预期工作。但是当我想将返回结果绑定到这个建议时,什么也没有发生。它甚至没有执行。

此建议的目标方法如下:

@Override
public List<Customer> getAll() {
    return sessionFactory.getCurrentSession()
        .createQuery("from Customer", Customer.class)
        .list();
}

我使用这个依赖项

org.springframework:spring-webmvc:5.3.17
org.springframework:spring-aspects:5.3.17
org.aspectj:aspectjweaver:1.9.7

无法匹配类型 List<Customer> 因为 returning 子句还 将匹配 限制为仅那些方法执行return 指定类型的值 Object 或其子类型在这种情况下,将匹配任何 return 值).

因此,在您的代码中,而不是:

public void adviceBeforeGetAllCustomersFromDatabase(
    JoinPoint joinPoint, List<Customer> resultList) {
...

试试:

public void adviceBeforeGetAllCustomersFromDatabase(
    JoinPoint joinPoint, Object resultList) {
...