依赖反转
依赖
为什么要将依赖反转,因为当存在依赖时,被依赖的模块A会先进行编译,而依赖的模块B会在A编译后才能进行编译。
定义
软件设计存在抽象层与是实现层之分,一般情况下,抽象依赖于实现。
但是抽象层稳定,实现层容易变化,抽象层应该有较实现层更高的复用性,它就应该我们设计和考量的核心与重点,而不是具体的实现,这样一来,要求我将依赖关系反转过来,即实现应该依赖于我们的抽象,这样的设计才是灵活和易于扩展的。
因此出现依赖反转的概念,即面向接口编程的。接口不提供任何的实现,可以真正意义上进行抽象层的工作。
依赖注入
问题
当进行依赖反转时,编程的可能情形是:
1 | interface IService{ |
在此的问题是,当实例化service时,必须要使用到实现类
依赖注入的实现
运用spring的依赖注入会完美地解决“抽象在创建时刻对实现产生依赖”的问题,在我们代码里,抽象将永远不需要再被指向他的具体实现了,这个过程会放到sping 的配制文件里,使用依赖注入的方式完成