依賴注入入門——Unity(一)
參考資料http://blog.csdn.net/m13666368773/article/details/7802126
背景介紹
在设计模式中,尤其是结构型模式很多时候解决的就是对象间的依赖关系,变依赖具体为依赖抽象。平时开发中如果发现客户程序依赖某个或某类对象,我们常常会对他们进行一次抽象,形成抽象的抽象类、接口,这样客户程序就可以摆脱所依赖的具体类型。
这个过程中有个环节被忽略了------谁来选择客户程序需要的满足抽象类型的具体类型呢?通过后面的介绍你会发现很多时候创建型模式可以比较优雅的解决这个问题,但另一个问题出现了,如果您设计的不是具体的业务逻辑,而是公共库或框架程序呢,这时候你是一个‘服务方’,不是你调用那些构造类型,而是它们把抽象类型传给你,怎么松散地把加工好的抽象类型传递给客户程序就是另一回事了。
这个情形也就是常说的“控制反转”,IOC:Inverse of Control;框架程序与抽象类型的调用关系就像常说的好莱坞规则:Don’t call me,I’ll call you
主要内容
1.依賴注入概念
2.幾種比較流程的IoC框架及參考資料
3.IoC的優缺點
4.小結
一、依賴注入概念
依賴注入(Dependency Injection,英文縮寫為DI),是這樣一個過程,它又控制反轉(Inversion of Control,英文縮寫為Ioc):由於某客戶類只依賴于服務類的一個接口,而不依賴于具體服務類,所以客戶類只定義一個注入點。在程序運行過程中,客戶類不直接實例化具體服務類實例,而是客戶類的運行上下文環境或專門組件負責實例化服務類,然後將其注入到客戶類中,保證客戶類的正常運行。
IOC(Inverse of Control)可翻译为“控制反转”,但大多数人都习惯将它称为“依赖注入”。在Spring中,通过IOC可以将实现类 、参数信息等配置在其对应的配置文件中 ,那么当需要更改实现类或参数信息时,只需要修改配置文件即可
依赖注入即应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转。虽然平时只需要按要求将bean配置到配置文件中
二、當前比較流行的幾個IoC框架
Unity:http://www.cnblogs.com/techborther/archive/2012/01/06/2313498.html
Ninject:http://www.cnblogs.com/techborther/archive/2012/01/06/2313498.html
Spring.Net:http://www.cnblogs.com/GoodHelper/archive/2009/10/25/Spring_NET_IoC.html
StructureMap http://structuremap.sourceforge.net/Default.html
Castle:http://www.cnblogs.com/Terrylee/category/124829.html
二、IoC的優缺點
它的基本思想就是把類的依賴從類內部轉化到外部減少依賴。
IoC最大的好處是什麽?因為把對象生成放在了XML里定義,所以當我們需要換一個實現子類將會成很簡單(一般這樣的對象都是實現于某種接口的),要修改XML就可了,這樣我們甚至可以實現對象的熱插撥(有點象USB接口和SCIS硬盤了)
IoC最大的缺點是什麽?(1)生成一個對象的步驟變複雜了(其實上操作上還是挺簡單的),對于不習慣這種方式的人,會覺得有些別扭和不直觀。(2)對象生成因為是使用反射編程,在效率上有些損耗。但對於IoC提高的維護性和靈活性來說,這點損耗是微不足道的,除非某對的生成對效率要求特別高。(3)缺少IDE重構操作的支持,如果在VS要對類改名,那么你還需要去XML文件里手工去改了,這似乎是所有XML方式的缺憾所有。
三、為什麽要使用依賴注入
我們使用抽象接口來隔離使用者和具體實現之間的依賴關係,但是不管再怎麼抽象,最終還是要創建具體實現類的實例,這種創建具體實現類的實例對象就會對于具體實例的依賴,為了消除這種創建依賴性,需要把依賴移出到程序的外部(比如配置文件)。使用依賴注入后,這些類完全是基於抽象接口編寫而成的,所以可以最大限度地適應需求的變化。依賴注入的形式有三種,分別為構造子注入(Constructor Injection)、設值方法注入(Setter Injection)和接口注入(Interface Injection)。
依賴注入入門——Unity(一)的更多相关文章
- 依賴注入入門——Unity(二)
參考博客文章http://www.cnblogs.com/kebixisimba/category/130432.html http://www.cnblogs.com/qqlin/tag/Unity ...
- GOOGLE搜索從入門到精通V4.0
1,前言2,摘要3,如何使用本文4,Google簡介5,搜索入門6,初階搜索 6.1,搜索結果要求包含兩個及兩個以上關鍵字 6.2,搜索結果要求不包含某些特定資訊 6.3,搜索結果至少包含多個關鍵字中 ...
- Flask從入門到入土(三)——模板
模板是一個包含響應文本的文件,其中包含佔位變量表示的動態部分,其具體值只是請求上下文中才能知道.使用真實值替換變量,再返回最終得到的響應字符串,這一過程稱爲渲染.爲了渲染模板,Flask使用了一個名爲 ...
- Windows PowerShell 入門(7)-関数編2
この連載では.Microsoftが提供している新しいシェル.Windows Power Shellの使い方を解説します.前回に引き続きPowerShellにおける関数の取り扱いとして.変数と関数のスコ ...
- Windows PowerShell 入門(3)-スクリプト編
これまでの記事 Windows PowerShell 入門(1)-基本操作編 Windows PowerShell 入門(2)-基本操作編 2 対象読者 Windows PowerShellでコマンド ...
- Windows PowerShell 入門(2)-基本操作編 2
前回に引き続きMicrosoftが提供している新しいシェル.Windows Power Shellの基本操作方法を学びます.基本操作編第2弾の今回は.パイプの使用方法を中心としたコマンドレットの操作方 ...
- Delphi APP 開發入門(四)簡易手電筒
Delphi APP 開發入門(四)簡易手電筒 分享: Share on facebookShare on twitterShare on google_plusone_share 閲讀次數:32 ...
- Delphi APP 開發入門(六)Object Pascal 語法初探
Delphi APP 開發入門(六)Object Pascal 語法初探 分享: Share on facebookShare on twitterShare on google_plusone_sh ...
- Delphi APP 開發入門(五)GPS 定位功能
Delphi APP 開發入門(五)GPS 定位功能 分享: Share on facebookShare on twitterShare on google_plusone_share 閲讀次數 ...
随机推荐
- 最短路径算法之一——Floyd算法
Floyd算法 Floyd算法可以用来解决任意两个顶点之间的最短路径问题. 核心公式为: Edge[i][j]=Min{Edge[i][j],Edge[i][k]+Edge[k][j]}. 即通过对i ...
- 如何修改linux系统主机名称
完成目标: 修改centos 7系统的主机名称 使用命令: hostnamectl [root@ossec-server ~]# hostnamectl --help hostnamectl [OPT ...
- svn的merge使用例子
先说说什么是branch.按照Subversion的说法,一个branch是某个development line(通常是主线也即trunk)的一个拷贝,见下图: branch存在的意义在于,在不干扰t ...
- 八大排序方法汇总(选择排序,插入排序-简单插入排序、shell排序,交换排序-冒泡排序、快速排序、堆排序,归并排序,计数排序)
2013-08-22 14:55:33 八大排序方法汇总(选择排序-简单选择排序.堆排序,插入排序-简单插入排序.shell排序,交换排序-冒泡排序.快速排序,归并排序,计数排序). 插入排序还可以和 ...
- PHP 日期计算函数【差异天数】
function count_days($a,$b){ $a_dt=getdate($a); $b_dt=getdate($b); $a_new=mktime(12,0,0,$a_dt['mon'], ...
- 【HDOJ】4775 Infinite Go
其实是一道模拟题,并查集用来优化.还可以的一道题目. /* 4775 */ #include <iostream> #include <sstream> #include &l ...
- 【原创】基于ZYNQ7000的交叉编译工具链Qt+OpenCV+ffmpeg等库支持总结(二)
承接上文http://www.cnblogs.com/bombe1013/p/3294301.html,我们接下来说说Qt的移植与安装. 很喜欢Qt这个库以及Qt creater这个IDE,其实个人觉 ...
- oracle11g dataguard部署指南
一.Oracle11DB+DG配置 1. 单机环境介绍(PRIMARY DATABASE) 主库 primary public ip 192.168.0.252 ...
- Hibernate配置文件解释
Hibernate配置文件主要用于配置数据库连接和Hibernate运行时所需的各种属性每个Hibernate配置文件对应一个Configuration对象Hibernate配置文件可以有两种格式: ...
- Application Pool Identities
Whether you are running your site on your own server or in the cloud, security must be at the top of ...