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

2019-11-23 16:02:04来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

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

第二章 Spring框架基础

面向接口编程的设计方法

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

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

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

? image

?

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

? image

? 由于 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应用程序

未完,待续......


原文链接:https://www.cnblogs.com/train99999/p/11915113.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:看源码学编程系列之开篇

下一篇:ThreadLocal原理分析与代码验证