- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
最佳实践:使用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
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=exPointcut1 expression=execution(* com.grgbanking..service.*.*(..))/
!—配置记录异常日志切面--
aop:aspect ref=exceptionLog order=3
!—配置抛出异常后通知 aop:after-
您可能关注的文档
- 教科版思想品德7年级上册教案.doc
- 教科版思想品德8年级上册期中试题(1、2单元).doc
- 教科版物理8年级下册知识框架复习.doc
- 教科版思想品德8年级上期期中测试题6.doc
- 教科版8年级物理力学50道选择.doc
- 教科版科学3年级下册期末试卷2011答案卷.doc
- 教科版科学4年级下册各单元练习题(全)6.doc
- 教科版科学4年级下册各单元练习题(全).doc
- 教科版科学6年级上册期末试题.doc
- 教科版高2下半期考试物理练习题.doc
- 2025年智能电网柔性直流输电技术在我国西部地区应用前景.docx
- 7.2 弹力-人教版八年级物理下册.pptx
- 2025年智能电网柔性直流输电技术在智能变电站中的应用研究.docx
- 2025年智能电网柔性直流输电技术在智能电网智能化存储中的应用.docx
- 2025年智能电网柔性直流输电技术在新能源并网中的应用研究.docx
- 2025年智能电网柔性直流输电技术在智能电网智能化控制中的应用.docx
- 2025年智能电网柔性直流输电技术在智能电网智能化预测中的应用.docx
- 2025年智能电网柔性直流输电技术在智能电网智能化服务中的应用.docx
- 2025年智能电网柔性直流输电技术在智能电网智能化运维中的应用.docx
- 2025年智能电网柔性直流输电技术智能化保护系统研究.docx
原创力文档


文档评论(0)