【译文】【学习】Spring 依赖注入(控制反转)

【目标读者】

  本教程是专为java编程人员设计的,用来帮助他们理解Spring 3框架以及基于它的应用。

【前置条件】

  在阅读教程之前你应该有一个比较好对java语言知识的理解

【系列教程】

  Introduction to spring framework

     Spring interview questions

  Dependency injection(ioc) in spring

  Spring hello world example in eclipse

  Spring java based configuaration

  Dependency injection via setter method in spring

  Dependency injection via constructor in spring

  Spring Bean scopes with examples

  Initializing collections in spring

  Beans Autowiring in spring

  Inheritance in Spring

  Spring ApplicationContext

  Spring lifetime callbacks

  BeanPostProcessors in Spring

  Annotation based Configuration in spring

  Spring AOP tutorial

 

【Spring 依赖注入】

  依赖注入的基本概念(也可以叫做控制反转),是指你不用创建对象,而是描述对象如何创建。不用直接在程序代码里面直接连接你的组件和服务,而是通过配置文件描述组件需要哪些服务。一个容器(Spring中为IOC容器)负责上述问题。

  举个例子:IOC应用,对象在创建的时候可以通过外部实体给与所需要的依赖,在系统中,外部实体和对象是相互协作的。那就是说,依赖被注入到对象中。因此,IOC意味着责任的反转:一个对象如何获取协作对象的引用。

 

  就像好莱坞的名言:Don't call us, we shall call you!

 

【例子】

  假设有俩个类:Car和Engine,Car中有一个对象Engine。

  正常的方式:有很多方法初始化这个Engine对象,最简单的和最普通的就是使用new操作符创建一个。

  使用依赖注入:将实例化和提供实例化的工作外包的第三方。Car需要操作Operate对象,但是它将获取Engine的工作外包给了第三方。指定的第三方决定实例化的时刻和用于创建实例的类型。Car和Engine之间的依赖由第三方注入。整个协议涉及到一些配置信息,整个过程被称为依赖注入。

 

【Spring依赖注入的好处】

  确保配置和服务的使用是分离的

  通过改变配置文件就可以切换服务的实现

  增强可测试性:通过注入mock依赖

  依赖能被轻易的标识

  不需要阅读代码就可以知道实例有哪些依赖

 

【依赖注入的类型】

  setter注入:基于bean的setter方法:在调用默认的构造函数或者一个无参数的静态工厂方法实例化对象之后,会调用setter方法注入依赖

  构造器注入:基于bean的构造函数:调用指定参数的构造函数,如果有多个,则根据一些规则匹配决定调用哪一个。

  接口注入:通过实现接口的方式,我们获取依赖实例 - 这是不好的方式

posted @ 2016-12-26 14:31  彭玉松  阅读(151)  评论(0编辑  收藏  举报