模板类的 Spring AOP 切入点不起作用

Posted

技术标签:

【中文标题】模板类的 Spring AOP 切入点不起作用【英文标题】:Spring AOP Pointcut for a template class not working 【发布时间】:2012-08-30 07:19:14 【问题描述】:

我有以下课程作为我的切入点

   public class GenricExceptionMapper implements ExceptionMapper<Exception> 

Logger logger = Logger.getLogger(GenricExceptionMapper.class);
public Response toResponse(Exception exception) 
    logger.error(exception.getStackTrace());
    logger.info("Exception Thrown");
    String res="500 - Internal Server Error";
    exception.printStackTrace();
    logger.debug("Sending Http Response :"+res);
    return Response.status(500).entity(res).build();



以及为它定义的以下建议...

 @Aspect
 public class ExceptionMapperAspect 
Logger logger = Logger.getLogger(ExceptionMapperAspect.class);

//@Context HttpServletRequest servletRequest;

@AfterReturning( pointcut="execution(* toResponse(..))")
public void logExceptionAspect()

    //logger.info("statsKey in request object "+servletRequest.getAttribute("statsKey"));

当我尝试运行它时,我收到以下异常错误消息..

**

找不到接口的类型参数 javax.ws.rs.ext.ExceptionMapper

** 这个类正在抛出错误 http://grepcode.com/file/repo1.maven.org/maven2/org.jboss.resteasy/resteasy-jaxrs/2.2.2.GA/org/jboss/resteasy/util/Types.java#Types.getActualTypeArgumentsOfAnInterface%28java.lang.Class%2Cjava.lang.Class%29

RESTEasy 代码的一部分。

这是因为“Spring AOP 无法建议实现模板接口的切入点类”吗? 有任何想法吗? Spring AOP 如何为实现参数化接口的类创建代理对象?...它使用 CGLIB 还是 JDK 代理?

【问题讨论】:

我知道这是旧的,但仍列为未答复。如果它看起来合适,请您接受并支持我的回答吗?谢谢。 【参考方案1】:

我认为您的问题出在其他地方。我用谷歌搜索了你的例外

找不到接口的类型参数

并发现它与 JBoss RESTEasy 相关。尝试注释掉部分类或方面代码,直到找到罪魁祸首。

顺便说一句,您的toResponse 实现返回一个原始类型。将其设为 Response&lt;Exception&gt; 以提高类型安全性并避免出现警告。

【讨论】:

Hmmn....我忘了说,这个错误是由 RESTEasy 的一类而不是 Spring AOP 引发的。 那么您现在的问题到底是什么?如果它与方面相关,我可以提供帮助。否则我不是应用服务器、容器等方面的专家,但如果我了解您的真正问题,我会尽力提供帮助。 啊,你刚刚编辑了你的问题。好吧,正如我所说,我认为这与方面无关。如果您删除建议会发生什么?错误会消失吗?你的建议真的没有用吗? 问题是当我为 RESTEasy 异常映射器定义了方面建议时。它在初始化 spring 上下文时给了我这个运行时异常。这就是我所知道的。 在你的问题中,建议什么也没做,它被注释掉了。该建议究竟有什么作用?我认为您的错误必须在建议代码中,而不是在建议中。

以上是关于模板类的 Spring AOP 切入点不起作用的主要内容,如果未能解决你的问题,请参考以下文章

2018第17周总结

SpringBoot异步任务及Async不起作用的原因

spring3使用aop的annotation不起作用

Spring AOP + AspectJ maven 插件 - 内部方法调用不起作用

Spring中AOP操作

Spring 声明式事务@Transactional不起作用,为啥