来自 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) {
...
这是建议
@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) {
...