模板类的 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<Exception>
以提高类型安全性并避免出现警告。
【讨论】:
Hmmn....我忘了说,这个错误是由 RESTEasy 的一类而不是 Spring AOP 引发的。 那么您现在的问题到底是什么?如果它与方面相关,我可以提供帮助。否则我不是应用服务器、容器等方面的专家,但如果我了解您的真正问题,我会尽力提供帮助。 啊,你刚刚编辑了你的问题。好吧,正如我所说,我认为这与方面无关。如果您删除建议会发生什么?错误会消失吗?你的建议真的没有用吗? 问题是当我为 RESTEasy 异常映射器定义了方面建议时。它在初始化 spring 上下文时给了我这个运行时异常。这就是我所知道的。 在你的问题中,建议什么也没做,它被注释掉了。该建议究竟有什么作用?我认为您的错误必须在建议代码中,而不是在建议中。以上是关于模板类的 Spring AOP 切入点不起作用的主要内容,如果未能解决你的问题,请参考以下文章