Spring 如何忽略AOP异常并继续使用服务逻辑

Spring 如何忽略AOP异常并继续使用服务逻辑,spring,aspectj,spring-aop,Spring,Aspectj,Spring Aop,我对SpringAOP(aspectj)有疑问 假设一个通知在执行某个逻辑时抛出了意外/未检查的异常(这里是在通知出现问题之后) 主要方法: public class Main { public static void main(String[] args) { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-context.xml");

我对SpringAOP(aspectj)有疑问

假设一个通知在执行某个逻辑时抛出了意外/未检查的异常(这里是在通知出现问题之后)

主要方法:

public class Main {

    public static void main(String[] args)  {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-context.xml");
        ShapeService service =  applicationContext.getBean("shapeService",ShapeService.class);
        service.getTraingle().getName();
        System.out.println("calling another method");
    }
}
由于@After通知中出现异常,下面抛出了错误,但我希望继续执行业务逻辑,即在控制台中打印“调用另一个方法”

before logger storing in DB
after logger storing in DB 
triangle shape
Exception in thread "main" java.lang.reflect.UndeclaredThrowableException
    at room.aop.model.Triangle$$EnhancerBySpringCGLIB$$460db113.getName(<generated>)
    at room.aop.client.Main.main(Main.java:16)
Caused by: java.sql.SQLException
    at room.aop.aspects.DataBaseLoggingAspect.printAfterAspect(DataBaseLoggingAspect.java:22) 
在记录器存储到数据库之前
记录器存储在数据库中后
三角形
线程“main”java.lang.reflect.UndeclaredThrowableException中的异常
在room.aop.model.Triangle$$EnhancerBySpringCGLIB$$460db113.getName()中
at room.aop.client.Main.Main(Main.java:16)
原因:java.sql.SQLException
在room.aop.aspects.DataBaseLoggingAspect.printAfterAspect(DataBaseLoggingAspect.java:22)
我对解决上述问题的想法如下,但如何在春季处理这一问题:

  • 方面必须在不同的线程中运行
  • 运行fire and forget原则中的方面(异步)

  • 在AspectJ中,您可以编写一个方面来拦截另一个方面,而在SpringAOP中则不能。但我也认为这会被过度设计。我的建议是保持简单,并向您的方面添加适当的异常处理。不建议使用@kriegaex处理未检查的异常。我认为合适的方法是异步处理JMS/中的持久性逻辑。稍后我将实现并共享代码。伙计,你问这个问题是因为你想处理异常。所以,只要处理好它们,不要变得哲学化。“不建议处理未检查的异常”,这是从哪里得到的?未检查并不意味着未处理。您明确希望应用程序代码继续运行。这不可避免地意味着您需要以某种方式处理异常。
    before logger storing in DB
    after logger storing in DB 
    triangle shape
    Exception in thread "main" java.lang.reflect.UndeclaredThrowableException
        at room.aop.model.Triangle$$EnhancerBySpringCGLIB$$460db113.getName(<generated>)
        at room.aop.client.Main.main(Main.java:16)
    Caused by: java.sql.SQLException
        at room.aop.aspects.DataBaseLoggingAspect.printAfterAspect(DataBaseLoggingAspect.java:22)