最佳实践:使用SpringAOP对异常进行统1处理.doc

最佳实践:使用SpringAOP对异常进行统1处理.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
最佳实践:使用SpringAOP对异常进行统1处理

最佳实践:使用Spring AOP对异常进行统一处理 分类:Java异常处理 作者:凡彬勇 日期:2011-07-18 导读:使用Spring AOP对异常进行拦截,将异常的处理逻辑和正常的处理逻辑进行解耦 问题 我们在捕获到异常并对异常进行处理时可能会遇到如下一些问题: 1.不确定应如何处理这些异常 2.需要记录异常日志时没有记录,或者异常在不同的地方重复记录,使得排错调试不方便 3.处理日志时,需要在每一个try-catch块包含一些处理代码,有时候异常处理的代码比正常执行代码还多,污染正常执行代码。 4.同样类型异常有不同的处理方式,使最终的处理变得复杂。 5.接口抛出异常,破坏封装,打破了接口与实现之间的清晰界限。 6.异常处理代码散落在,修改起来时非常麻烦。无法对某些异常进行统一处理和修改。 …… 有必要使用一个统一的异常处理机制 来进行某些异常处理的统一决策。比如对异常进行统一的日志记录,对散落在各处的某类异常进行统一处理等。 解决办法 这里以Java平台分层架构为例,因为是Flex直接调用Java,没有常见的Action控制层。Service层是Java最顶级一层。使用Spring AOP对serivce层抛出的异常进行拦截,记录所有未处理的异常日志,并将所有未处理异常转换成统一自定义的系统异常,以便Flex客户端能够处理。下面的代码举例说明了如何使用Spring AOP将异常处理从正常的逻辑中分离出来,使得异常处理逻辑和正常的业务逻辑做到完全解耦。不同项目对于异常处理的要求不同,在具体项目中需要对异常处理代码根据项目需要进行修改,加以完善。 AOP为Aspect Oriented Programming的缩写,意为:面向方法编程,可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。运行期动态代理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>org.springframework.security.userdetails.UsernameNotFoundException</value </set> </property> </bean> <!-- 未处理的异常转换成系统异常,供客户端错误提示用的处理类 --> <bean id = " exceptionTransfer" class = "com.grgbanking.platform.core.exception.handler.ExceptionMessageTransfer"> <property name = "noCatchedExceptions"> <set> <value>com.grgbanking.platform.core.exception.SysException</value> <value>com.grgbanking.platform.core.exception.AppException</value> <value>com.grgbanking.platform.core.exception.PasswordOverdueException</value> <value>org.springframework.security.userdetails.UsernameNotFoundException</value> </set> </property> </bean> <aop:config proxy-target-class="true"> <!—配置切入点: 所有service类方法执行时? <aop:pointcut id="exPointcut1" expression="execution(* com.grgbanking..service.*.*(..))"/> <!—配置记录

文档评论(0)

ktj823 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档