Spring学习指南-第二章-Spring框架基础

Posted 乘风破浪会有时,直挂云帆济沧海

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring学习指南-第二章-Spring框架基础相关的知识,希望对你有一定的参考价值。

第二章 Spring框架基础

面向接口编程的设计方法

? 在上一章中,我们看到了一个依赖于其他类的POJO类包含了对其依赖项的具体类的引用。例如,FixedDepositController 类包含 对 FixedDepositService 类的引用,FixedDepositService 类包含对 FixedDepositDao 类的引用。如果这个依赖于其他类的类直接引用其依赖项的类,则会导致类之间的紧密耦合。这意味着如果要替换其依赖项的其他实现,则需要更改这个依赖于其他类的类本身。

? 我们知道 Java 接口定义了其实现类应遵循的契约。因此,如果一个类依赖于其依赖项实现的接口,那么当替换不同的依赖项实现时,类不需要改变。一个类依赖于由其依赖项所实现的接口的应用程序设计方法称为 "面向接口编程"。这种设计方法使得依赖类和依赖项之间松耦合。由依赖项类实现的接口称为依赖接口。

? 和 ”面向类编程“ 相比,”面向接口编程“ 是更加良好设计实践,下图表明 ABean 类依赖于 BBean 接口而不是 BBeanImpl 类(BBean接口的实现)。

? 技术图片

?

下图中,FixedDepositJdbcDao 单纯的使用 JDBC, 而 FixedDepositHibernateDao 使用 Hibernate ORM 进行数据库交互。如果 FixedDepositService 直接依赖于 FixedDepositJdbcDao 或 FixedDepositHibernateDao,当需要切换与数据库交互的策略时,则需要在 FixedDepositService 类中进行必要的更改。FixedDepositService 依赖于 FixedDepositJdbcDao 和 FixedDepositHibernateDao 类实现 FixedDepositDao 接口(依赖接口)。现在,通过使用单纯的 JDBC 或 Hibernate ORM 框架,你可以向 FixedDepositService 实例提供 FixedDepositJdbcDao 或 FixedDepositHibernateDao实例。

? 技术图片

? 由于 FixedDepositService 依赖于 FixedDepositDao 接口,因此将来可以支持其他数据库交互策略。如果决定使用iBATIS(mybaits)持久性框架进行数据库交互,那么可以使用IBATIS,而不需要对FixedDepositService 类进行任何更改,只需要创建一个 FixedDepositDao 接口的 FixedDepositIbatisDao 类,并将 FixedDepositIbatisDao 的实例提供给 FixedDepositService 实例。

? 现在来看看 ”面向接口编程“ 是如何提高依赖类的可测试性的。

提高依赖类的可测试性

? 在上图中,FixedDepositSerivce 类保留了对 FixedDepositDao 接口的引用。FixedDepositJdbcDao 和 FixedDepositHibernateDao 是 FixedDepositDao 接口的具体实现类。现在,为了简化 FixedDepositService 类的单元测试,我们可以把原来对具体数据库操作的实现去掉,用一个实现了 FixedDepositDao 接口但是不需要数据库的代码来代替。

? 如果 FixedDepositService 类直接引用 FixedDepositJdbcDao 或 FixeDepositHibernateDao 类,那么测试 FixedDepositService 类则需要设置数据库以进行测试。这表明通过对依赖接口的模拟依赖类实现,你可以减少针对单元测试的基础设施设置的工作量。

? 现在来看看 Spring 如何在应用程序中使用 “面向接口编程” 的设计方法,你需要执行以下操作:

? 1.创建引用依赖接口,而不是依赖项的具体实现的 bean 类;

? 2.定义 元素,并在元素中指定所要注入依赖bean的依赖项的具体实现类。

使用 “面向接口编程” 设计方法的MyBank应用程序

未完,待续......

以上是关于Spring学习指南-第二章-Spring框架基础的主要内容,如果未能解决你的问题,请参考以下文章

Java学完基础,后面学习框架可行吗?

Spring基础学习

Spring框架学习笔记

Spring框架学习笔记

SpringBoot 学习笔记01—Spring基础入门

SPRING03_为什么要学习源码基础的接口SPRING工作流程详解