SpringInAction研学记录-第5、6章

第五章

dao应该以接口的方式发布功能,而应用程序的其他部分通过接口来访问dao,实现代码的松散耦合

数据访问层是以持久化技术无关的方式来进行访问的。持久化方式的选择独立于dao层,只有相关的数据访问方法通过接口来发布供其他应用程序来调用。这样灵活的设计即使切换到其他的持久化框架后也能对系统产生较小的影响

spring框架提供了与持久化平台无关的持久化异常。简单来说就是无论使用了哪种持久化框架,spring如果兼容它,那么就会将对应的持久化平台的异常统一地“翻译”为spring中的一套持久化异常体系。其中,这些异常都继承自DataAccessException类

spring在数据访问层采用了模板化思想,使用了设计模式:模板方法模式

模板方法定义了过程得主要框架。它将过程中与特定实现相关的部分委托给接口,而这个接口得不同实现定义了过程中的具体行为

spring将数据访问过程中固定的部分,称为模板(如继承了spring的dao基类后,开闭数据库连接的操作框架将会处理,无需手动干预);将可变的部分,称为回调(如继承了spring的dao基类后,需要自己实现的自定义方法)。这种设计方式,被称为:模板-回调设计

spring支持3种形式的数据源:jdbc驱动定义、jndi查找和连接池

在spring中:

jdbc驱动定义的数据源是最简单的定义方式。由于不支持多线程程序,且只有一个数据连接对象,每次都会新创建数据连接对象,开销大,不推荐使用

jndi需要在服务器上查找数据源配置,可以在应用程序之外管理数据源,获得更好的性能

连接池一般通过dbcp三方连接池实现驱动。BasicDataSource类是最常用的数据连接bean,它类似于jdbc驱动定义中的DriverManagerDataSource类(每次请求都会创建一个新连接对象)

持久化到数据库时定义的业务对象,一开始是遵循ejb规范中的ejb的,因为比较重量级,近年来已经从ejb切换到pojo开发模式中来了(即现在通常所称的po、entity等dao层的业务持久化Java对象)


总结:

对为什么dao要设计成接口有了更深的理解

spring对于数据持久层的设计应用了模板方法的设计模式

一般开发时的数据源使用连接池,可以复用,统一动态分配和管理,节约资源

第六章

全有或全无的操作,称为事务。它是一个期望全发生或全部不发生的工作单元,保证数据的完整性

事务的acid特性:原子性、一致性、隔离性和持久性

spring提供了编码式和声明式事务的支持:

编码式事务:

优点:能通过代码精确地控制事务边界

缺点:侵入性实现

声明式事务:

通过spring aop方式实现

优点:由于应用在方法级别,可维护性较高

缺点:粒度没有编码式事务那么细

spring不直接管理事务,它是通过提供的多种事务管理器来实现事务的。spring为每个持久化框架提供的事务管理器都不同,需要有选择地使用

事务的属性:传播行为、隔离级别、只读、事务超时和回滚规则

<tx:annotation-driven>元素用于开启注解式事务配置。它来告诉spring检查应用上下文所有以@Transaction注解的bean


总结:

进一步明确了事务的5个属性。如隔离级别中的若干项需要根据实际业务进行取舍,选择最合适的隔离级别

了解了spring支持两种事务的实现方式:编码式事务和声明式事务。且声明式事务是通过spring aop来实现的

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容