商讯信箱
用户名: @
密  码:   注册|忘记密码
登录
个人用户经销商
您的位置:首页 > 技术频道 > 正文

Spring DAO层的设计思想



    Spring DAO异常体系类非常丰富,这里,我们仅列出DataAccessException异常类下的子类。我们可以很容易地通过异常类的名字了解到异常所代表的语义。我们通过下表对这些异常进行简单的描述:

表 1 Spring DAO异常体系类

异常

 

 

 

说明

 

 

 

CleanupFailureDataAccessException

 

 

 

 DAO操作成功执行,但在释放数据资源时发生异常,如关闭Connection时发生异常等。

 

 

 

ConcurrencyFailureException

 

 

 

表示在进行并发数据操作时发生异常,如乐观锁无法获取、悲观锁无法获取、死锁引发的失败等待异常。

 

 

 

DataAccessResourceFailureException

 

 

 

访问数据资源时失败,如无法获取数据连接,无法获取Hibernate的会话等。

 

 

 

DataRetrievalFailureException

 

 

 

获取数据失败,如找不到对应主键的数据,使用了错误的列索引等。

 

 

 

DataSourceLookupFailureException

 

 

 

无法从JNDI中查找到数据源。这个异常是Spring 2.0新增的。

 

 

 

DataIntegrityViolationException

 

 

 

当数据操作违反了数据一致性限制时抛出的异常,如插入重复的主键,引用不存在的外键等。

 

 

 

InvalidDataAccessApiUsageException

 

 

 

不正确地调用某一持久化技术时抛出的异常,如在Spring JDBC中查询对象在调用前必须进行编译操作,如果忘记这项操作将会产生该异常。这种异常不是由底层数据资源产生,而是由不正确地使用持久化技术产生的。

 

 

 

InvalidDataAccessResourceUsage
Exception

 

 

 

在访问数据源时使用了不正确的方法所抛出的异常,如SQL语句错误将抛出该异常。

 

 

 

PermissionDeniedDataAccessException

 

 

 

数据访问时由于权限不足引发的异常。如用仅拥有只读权限用户试图进行数据更改操作将抛出该异常。该异常是Spring 2.0新增的。

 

 

 

UncategorizedDataAccessException

 

 

 

其它未分类的异常都归到该异常中。

 

 

 

    为了进一步细化错误的问题域,Spring对一级异常类进行子类的细分,如InvalidDataAccessResourceUsageException就拥有10多个子类,下面是其中3个子类:


图 3 一级异常类的细化

    对于InvalidDataAccessResourceUsageException异常,不同的持久化实现技术均有对应的子异常类。如  BadSqlGrammarException对应JDBC实现技术SQL语句语法错误的异常,而HibernateQueryExcpetion和TopLinkQueryException分别对应Hibernate和TopLink实现技术的查询语法异常。
    Spring的这个异常体系具有高度的可扩展性,当Spring需要对一个新的持久化技术提供支持时,只要定义为其定义一个对应的子异常就可以了,这种更改完全满足设计模式中的开-闭原则。
    虽然Spring定义了如此丰富的异常类,作为开发人员,我们仅需要对感兴趣的异常进行处理就可以了。假设某一个项目要求在发生乐观锁异常时,尝试再次获取乐观锁非不是直接返回错误。那么,我们只需要在代码中显式捕捉ConcurrencyFailureException异常,然后在catch代码块中编写满足需求的逻辑即可。其它众多的异常则可以简单地交由框架自动处理(如发生运行期异常时自动回滚事务)。

1 2 3 4 5 6
【内容导航】
第1页: 第1页 第2页: 第2页
第3页: 第3页 第4页: 第4页
第5页: 第5页 第6页: 第6页
©版权所有。未经许可,不得转载。
[责任编辑:赵恒]