我们正在使用Spring AOP和Log4j来登录我们的应用程序。我在应用程序中实现了@ Before,@ After,@ AfterThrowing建议。但我面临以下问题:
当在catch块中捕获到任何异常时,它不会调用@AfterThrowing建议来打印错误堆栈跟踪。
public void create() throws Exception
{
try
{
throw new NullPointerException();
}
catch(NullPointerException ex)
{
// want to call any advice for printing ex.printStackTrace();
}
}
我想为catch块中捕获的异常打印“错误堆栈跟踪”。意味着当try块中发生任何异常并被catch捕获时,应该调用一些建议来打印错误详细信息。
提前致谢!!!
答案 0 :(得分:1)
Spring AOP只能拦截方法执行,所以如果你在方法中捕获异常,它就不会到达拦截器。您可以建议在AspectJ中抛出异常,我相信(使用handler()
切入点指示符)。
答案 1 :(得分:0)
这是不可能的。 Spring AOP仅适用于方法调用级别。换句话说,建议的连接点是方法调用。
顾名思义,@AfterThrowing
可以在方法抛出后执行。在您的情况下,该方法不会从建议的角度抛出任何东西,即。该方法不会通过抛出异常来终止。它正常结束,因为捕获并处理了异常。
答案 2 :(得分:0)
我找到了弹簧AOP的解决方案。根据你的消息来源,
public void create() throws Exception
{
try
{
throw new NullPointerException();
}
catch(NullPointerException ex)
{
// want to call any advice for printing ex.printStackTrace();
}
}
不要将try{}catch()
放在此方法中。然后您的Aspect建议将触发。并将try catch语句放入方法调用者。像这样。
class Abc{
public void create() throws Exception
{
throw new NullPointerException();
}
}
然后,
public static void main(String[] args) {
try{
abc_obj.abc();
}catch(NullPointerException ex){
System.out.println("NUllpointer");
}
}