依赖注入,降低代码的耦合度。
耦合具有两面性:紧密耦合的代码难以测试,难以复用,难以理解,并且典型的表现出 “ 打地鼠 ” 式的bug 特性(修复一个 bug ,导致出现新的一个或多个 bug)。
一定程度的耦合又是必须的--完全没有耦合的代码什么也做不了。未完成有实际意义的功能,不同的类必须以适当的方式进行交互。
通过依赖注入(DI),对象的依赖关系将由负责协调系统中各个对象的第三方组件在创建对象时设定。对象无需自行创建或管理他们的依赖关系---依赖关系将被自动注入到他们需要的对象中去。
依赖注入的方式:
一、构造器注入
在构造时将任务作为构造器参数传入,传入的类型是所有类的必须实现的接口。
如果一个对象只通过接口(而不是具体实现或者初始化的过程)来表明依赖关系,那依赖就能在对象本身毫不知情的情况下,用不同的具体实现进行替换。
创建组件之间协作的行为通长为装配。Spring有很多种装配bean的方式,采用xml配置通常是最常见的装配方式,例如:
<?xml version="1.0" encoding="UTF-8">
<beans ...>
<bean id="knight" class="com.springinaction.knights.BraveKnight">
<constructoe-arg ref="quest">---------注入的类的地址
</bean>
<bean id="quest" class="com.springinaction.knights.SlapDragonQuest"/>
</beans>
Spring通过应用上下文(Application Context)装载Bean的定义并将它们组装起来。
Spring应用上下文全权负责对象的创建和组装。