Spring,@ Aspect,@ AfterThrowing,空白屏幕响应

时间:2011-02-25 10:15:35

标签: java spring aspectj

3 个答案:

答案 0 :(得分:1)

“我有aspectjrt-1.5.4.jar,aspectjweaver-1.6.1.jar”可能是你的问题。除了可能彼此不兼容外,它们都是非常古老的版本。您应升级到aspectjweaver的1.6.10版本并删除aspectjrt - aspectjweaver已包含其中的所有类。

答案 1 :(得分:0)

据我所知,切入点的正确定义应如下所示

@AfterThrowing(pointcut = "execution(* com.company..*(..))", throwing = "exception")
public void logException(Throwable exception)
{
    System.out.println(exception.getMessage());
}

请注意投掷应包含您在方法本身中绑定的参数名称(在本例中为 exception )。

虽然我没有看到它与异常有什么关系,但这可能是根本原因。

答案 2 :(得分:0)

我试图将建议应用于不是Spring bean的Struts操作。我修改了下面的方法,它开始工作。

@AfterThrowing(pointcut = "execution( * com.company..*(..)) and !execution( * com.company.*.action..*(..))", throwing = "throwable")
public void logException(JoinPoint joinPoint,Throwable throwable)
{
    Logger logger = Logger.getLogger(joinPoint.getTarget().getClass());
    String className = joinPoint.getTarget().getClass().getCanonicalName();
    logger.error(className + " :: " + joinPoint.getSignature().getName() + " :: " + "Exception", throwable);
}

牢记上述内容,我想知道使用* com.company..*(..)总是一个坏主意。 而是通过应用服务,业务,数据访问等特定包来保持其具体。