最佳实践:使用Spring AOP对异常进行统一处理(2)
时间:2025-07-10
时间:2025-07-10
有必要使用一个统一的异常处理机制 来进行某些异常处理的统一决策。比如对异常进行统一的日志记录,对散落在各处的某类异常进行统一处理等。
2. 解决办法
这里以Java平台分层架构为例,因为是Flex直接调用Java,没有常见的Action控制层。Service层是Java最顶级一层。使用Spring AOP对serivce层抛出的异常进行拦截,记录所有未处理的异常日志,并将所有未处理异常转换成统一自定义的系统异常,以便Flex客户端能够处理。下面的代码举例说明了如何使用Spring AOP将异常处理从正常的逻辑中分离出来,使得异常处理逻辑和正常的业务逻辑做到完全解耦。不同项目对于异常处理的要求不同,在具体项目中需要对异常处理代码根据项目需要进行修改,加以完善。
AOP为Aspect Oriented Programming的缩写,意为:面向方法编程,可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。Spring AOP使用的是运行期动态代理方式实现切面编程(关于AOP概念和Spring AOP的实现原理请大家查阅相关资料)。
下面的例子有两个类来实现对异常的统一处理。
com.grgbanking.platform.core.exception.handler.ExceptionLogger //记录异常日志
com.grgbanking.platform.core.exception.handler.ExceptionMessageTransfer //转换成自定义系统异常 然后通过spring的xml配置文件的配置将以上两个类的异常处理逻辑在运行时动态织入到正常的代码执行逻辑流程。
spring配置文件中 切面的相关配置:
<!-- 记录异常日志的处理类 -->
<bean id = "exceptionLog" class = "com.grgbanking.platform.core.exception.handler.ExceptionLogger">
<property name = "noCatchedExceptions">
<set>
<value>ernameNotFoundException</value
</set>
</property>
</bean>
<!-- 未处理的异常转换成系统异常,供客户端错误提示用的处理类 -->
<bean id = " exceptionTransfer"
下一篇:钢材市场营运方案