Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 服务层的异常包装器_Java_Spring_Exception_Architecture_Exception Handling - Fatal编程技术网

Java 服务层的异常包装器

Java 服务层的异常包装器,java,spring,exception,architecture,exception-handling,Java,Spring,Exception,Architecture,Exception Handling,我正在创建一个@组件,它将是我们的一个工件中的服务层,我想将来自这个新组件的所有可能的异常包装成一个特定的工件异常(仅对于给定的名称,它将是工件异常) 我的问题是如何将此服务层或下面的层中发生的任何异常转换为ArtifactException 我正在寻找比:(接球再投)更优雅的解决方案 我想在使用方面后使用@afterhrowing,但我想不使用方面来保持简单 我知道@ExceptionHandler,但这适用于DispatcherServlet,我们在服务层工作时没有实现,与spring mv

我正在创建一个
@组件
,它将是我们的一个工件中的服务层,我想将来自这个新组件的所有可能的异常包装成一个特定的工件异常(仅对于给定的名称,它将是
工件异常

我的问题是如何将此服务层或下面的层中发生的任何异常转换为
ArtifactException

我正在寻找比:(接球再投)更优雅的解决方案

我想在使用方面后使用
@afterhrowing
,但我想不使用方面来保持简单

我知道
@ExceptionHandler
,但这适用于
DispatcherServlet
,我们在服务层工作时没有实现,与spring mvc无关

有任何其他选项可以使用Spring?来处理此问题,可能是我不知道的新注释或任何其他方法

我想我正在寻找的是Spring中服务层的异常转换器


谢谢。

不,aspects似乎是完美的解决方案。但是,您不会使用
@posterhrowing
,您会使用
@Around
@SotiriosDelimanolis我只想在异常发生时包装异常,使用posterhrowing似乎非常适合此要求,因为它仅在服务方法引发任何异常时执行,使用Around似乎是隔离方法执行的一种方式,也许我可以在内部使用try-catch,然后重新刷新我的ArtifactException(看起来像是catch-then-rethrow),但是如果你能告诉我为什么不使用后刷新或者为什么我选择了周围,那就太好了,可能我没有看到什么。不过,我想的是返回后的
@posterhrowing
在这里是合适的。你为什么认为抓和重抓是不雅观的?在我看来,在这种情况下,它似乎比使用注释更优雅、更清晰。@WarrenDew想象一下,我们有几个方法使用相同的try-catch块,它似乎有很多重复的代码。显然,ypu可以告诉我在一个方法中重构这些try-catch块的逻辑,但是在我想要这个beaviour的每个方法的最后,我应该调用这个重构方法,一点也不坏,但是我正在寻找一些{优雅的}解决方案作为@ExceptionHandler,@ApplicationException包装了方法执行中发生的任何异常,而不做任何其他操作。无论如何,可能优雅不是正确的词,它应该是非侵入性的或类似的东西=P
 catch (NamingException ex){
      //EXCEPTION WRAPPING
      throw new ArtifactException(
        "Config error with JNDI and datasource, for db " + Util.quote(dbConnString), ex
      );
    }
    catch (SQLException ex ){
      //EXCEPTION WRAPPING
      throw new ArtifactException(
       "Cannot get connection from datasource, for db " + Util.quote(dbConnString), ex
      );
    }