最佳实践:使用Spring AOP对异常进行统一处理最佳实践:使用Spring AOP对异常进行统一处理.docVIP

最佳实践:使用Spring AOP对异常进行统一处理最佳实践:使用Spring AOP对异常进行统一处理.doc

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
最佳实践:使用Spring AOP对异常进行统一处理最佳实践:使用Spring AOP对异常进行统一处理

软件体系最佳实践文档 第  PAGE 7 页 共  NUMPAGES \* Arabic 7 页 最佳实践:使用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的缩写,意为:面向方法编程,可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。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 valueorg.springframework.security.userdetails.UsernameNotFoundException/value /set /property /bean !-- 未处理的异常转换成系统异常,供客户端错误提示用的处理类 -- bean id = exceptionTransfer class = com.grgbanking.platform.core.exception.handler.ExceptionMessageTransfer property name = noCatchedExceptions set valuecom.grgbanking.platform.core.exception.SysException/value valuecom.grgbanking.platform.core.exception.AppException/value valuecom.grgbanking.platform.core.exception.PasswordOverdueException/value valueorg.springframework.security.userdetails.UsernameNotFoundException/value /set /property /bean aop:config proxy-target-class=true !—配置切入点: 所有service类方法执行时? aop:pointcut id=exPoint

您可能关注的文档

文档评论(0)

zyongwxiaj8 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档