Spring依赖注入和控制反转详解

当某个Java实例需要调用另外一个Java实例时:

传统方法:
• 调用者负责创建调用者的实例,一般的做法是在该类中使用new的方式来创建一个对象。缺点:

  • 可扩展性差,如果被调用的类发生改变,在调用的类中也需要进行更改;

  • 职责不清。对于调用者而言,它并不关心被调用者的创建过程。但是它实际上却在主动地进行创建被调用者的实例。

工厂模式:

  • 调用者不用关心被调用者的实际创建过程,只需要找到对应的工厂类即可。调用的代码面向接口编程,可以让调用者和被调用者解耦,但是调用者仍然需要定位到工厂,跟工厂耦合在一起。

Spring依赖注入和控制反转模式:

  • Spring使用Bean工厂来管理所有的实例,依赖关系由Spring进行注入,实例之间的关系由IoC容器进行管理。

传统方法类似原始社会,一个人需要一把斧头,需要自己进行制造。
工厂模式类似工业社会,一个人需要一把斧头,只需要找到对应的工厂进行购买即可。
IoC注入类似“社会主义”,一个人需要一把斧头,“坐等”社会进行提供即可。

Spring依赖注入和控制反转的实际含义:

  • 当某个Java实例(调用者)需要调用另外一个实例(被调用者)时,无需在代码中创建被调用者,而是依赖外部容器(IoC)的注入。

  • 在依赖注入的模式下,创建被调用者的工作不由调用者来完成,因此称之为控制反转;创建被调用者实例的工作通常由Spring容器来完成,然后注入调用者,因此也称之为依赖注入。

依赖注入的两种模式:

设值注入:IoC容器使用属性的setter方法来注入被依赖的实例。

<bean id="a" class="A">
    <property name="b" ref="b">
</bean>
<bean id="b" class="B"></bean>

构造注入:IoC容器使用构造器来注入被依赖的实例。

<bean id="a" class="A">
    <constructor-arg ref="b"></constructor-arg>
</bean>
<bean id="b" class="B"></bean>

使用Spring IoC容器的三个基本要点

1. 应用程序的各组件面向接口编程。面向接口编程将组件之间的耦合提高到接口层次,从而有利于项目后期的扩展。
2. 应用程序的各组件不再自己产生,而是由Spring容器负责产生,并初始化。
3. Spring使用 xml 文件或者Annotation来管理的Bean的实现类、依赖关系,Spring容器则根据配置文件,利用反射来创建实例,并注入依赖关系。

控制反转与依赖注入并不是一回事,依赖注入只是控制反转的一个具体例子。控制翻转涵盖了使对象成为系统被动参与者的众多技术。当使用控制反转技术时,对象就会将对某些特性及方面的控制转到框架或者环境。什么是控制呢?对象创建和委托给依赖对象都是控制的例子。控制反转可以分别使用依赖注入和面向切面编程来使对象不需要来考虑这些问题。–《深入解析Springmvc+webFlow》第七页

控制反转是一个广义概念,指将控制权交还给框架。这里的控制可以是对创建新对象的控制、对事务的控制或者是对安全实现的控制。AOP是实现IoC的一项技术,依赖注入则是实现IoC的另外一项技术。–《深入解析Springmvc+webFlow》第十页

依赖注入是Spring框架的核心概念,作为控制反转的具体形式,依赖注入是框架用于连接应用程序各个部分的一项技术。框架负责将应用程序的各种依赖连接起来,并从应用程序代码中完全移除连接逻辑和对象创建。–《深入解析Springmvc+webFlow》第十页

对象创建和对象定位的职责从类转移到了框架,这种依赖关系实际上就是依赖注入。–《深入解析Springmvc+webFlow》第十三页

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值