快速业务通道

在Spring基础上实现自己的异常处理框架 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21
类的配置信息。如果无任何父类在exceptionContext中注册,就使用默认机制进行处理。

XML 方案:

因为spring2.0支持自定义schema功能,我们可以方便地采用自己的schema只要实现NamespaceHandler和BeanDefinitionPaser,后面一个比较重要,可以将自定义xml文件中的相关类注册到spring的上下文中,成为spring bean。

Xml schema:

<xsd:complexType name="exceptionType"> <xsd:sequence> <xsd:element name="level" default="error" minOccurs="0"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="error" /> <xsd:enumeration value="warning" /> <xsd:enumeration value="info" /> <xsd:enumeration value="confirmation" /> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name="handler" maxOccurs="unbounded"> <xsd:simpleType> <xsd:restriction base="xsd:string" /> </xsd:simpleType> </xsd:element> </xsd:sequence> <xsd:attribute name="errorCode"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:whiteSpace value="preserve" /> <xsd:pattern value="LDD600-+\d{1,5}.*" /> </xsd:restriction> </xsd:simpleType> </xsd:attribute> <xsd:attribute name="class" type="xsd:string" use="required" /> </xsd:complexType>

在Spring基础上实现自己的异常处理框架(5)

时间:2011-01-02

Annotation方案:

JDK1.5以上就有了annotation,可以简化我们的配置,使得配置信息和代码联系在一起,增加了代码的可读性。如何在spring中注册自定义的annotation和用annotation标注的class,可以参考文章2和文章:  。对于每个注册了的class用ExceptionalAnnotationBeanPostProcessor来parse具体的annotation信息(对于annotation的parse方法还会在以后继续改进)。

1package com.ldd600.exception.annotation; 2 3import java.lang.annotation.Documented; 4import java.lang.annotation.ElementType; 5import java.lang.annotation.Retention; 6import java.lang.annotation.RetentionPolicy; 7import java.lang.annotation.Target; 8 9import com.ldd600.exception.base.handler.ExceptionHandler; 10 11@Target({ElementType.TYPE}) 12@Retention(RetentionPolicy.RUNTIME) 13@Documented 14public @interface Exceptional { 15  String errorCode(); 16  Class<? extends ExceptionHandler>[] handlers(); 17} 18 1package com.ldd600.exception.processor; 2 3import org.springframework.beans.BeansException; 4import org.springframework.beans.factory.config.BeanPostProcessor; 5 6import com.ldd600.exception.annotation.Exceptional; 7import com.ldd600.exception.base.BaseAppException; 8import com.ldd600.exception.base.BaseAppRuntimeException; 9import com.ldd600.exception.config.ExceptionDefinition; 10import com.ldd600.exception.context.ExceptionContext; 11import com.ldd600.exception.context.CoreContextFactory; 12 13public class ExceptionalAnnotationBeanPostProcessor implements BeanPostProcessor

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号