1. 程式人生 > >spring中的Ioc技術是怎樣實現解耦的

spring中的Ioc技術是怎樣實現解耦的

4. IOC為我們帶來了什麼好處
我們還是從USB的例子說起,使用USB外部裝置比使用內建硬碟,到底帶來什麼好處?
第一、USB裝置作為電腦主機的外部裝置,在插入主機之前,與電腦主機沒有任何的關係,只有被我們連線在一起之後,兩者才發生聯絡,具有相關性。所以,無論兩者中的任何一方出現什麼的問題,都不會影響另一方的執行。這種特性體現在軟體工程中,就是可維護性比較好,非常便於進行單元測試,便於除錯程式和診斷故障。程式碼中的每一個Class都可以單獨測試,彼此之間互不影響,只要保證自身的功能無誤即可,這就是元件之間低耦合或者無耦合帶來的好處。
第二、USB裝置和電腦主機的之間無關性,還帶來了另外一個好處,生產USB裝置的廠商和生產電腦主機的廠商完全可以是互不相干的人,各幹各事,他們之間唯一需要遵守的就是USB介面標準。這種特性體現在軟體開發過程中,好處可是太大了。每個開發團隊的成員都只需要關心實現自身的業務邏輯,完全不用去關心其它的人工作進展,因為你的任務跟別人沒有任何關係,你的任務可以單獨測試,你的任務也不用依賴於別人的元件,再也不用扯不清責任了。所以,在一個大中型專案中,團隊成員分工明確、責任明晰,很容易將一個大的任務劃分為細小的任務,開發效率和產品質量必將得到大幅度的提高。
第三、同一個USB外部裝置可以插接到任何支援USB的裝置,可以插接到電腦主機,也可以插接到DV機,USB外部裝置可以被反覆利用。在軟體工程中,這種特性就是可複用性好,我們可以把具有普遍性的常用元件獨立出來,反覆利用到專案中的其它部分,或者是其它專案,當然這也是面向物件的基本特徵。顯然,IOC不僅更好地貫徹了這個原則,提高了模組的可複用性。符合介面標準的實現,都可以插接到支援此標準的模組中。
第四、同USB外部裝置一樣,模組具有熱插拔特性。IOC生成物件的方式轉為外接方式,也就是把物件生成放在配置檔案裡進行定義,這樣,當我們更換一個實現子類將會變得很簡單,只要修改配置檔案就可以了,完全具有熱插撥的特性。
以上幾點好處,難道還不足以打動我們,讓我們在專案開發過程中使用IOC框架嗎?
5. IOC容器的技術剖析
IOC中最基本的技術就是“反射(Reflection)”程式設計,目前.Net C#、Java和PHP5等語言均支援,其中PHP5的技術書籍中,有時候也被翻譯成“對映”。有關反射的概念和用法,大家應該都很清楚,通俗來講就是根據給出的類名(字串方式)來動態地生成物件。這種程式設計方式可以讓物件在生成時才決定到底是哪一種物件。反射的應用是很廣泛的,很多的成熟的框架,比如象Java中的Hibernate、Spring框架,.Net中 NHibernate、Spring.Net框架都是把“反射”做為最基本的技術手段。
反射技術其實很早就出現了,但一直被忽略,沒有被進一步的利用。當時的反射程式設計方式相對於正常的物件生成方式要慢至少得10倍。現在的反射技術經過改良優化,已經非常成熟,反射方式生成物件和通常物件生成方式,速度已經相差不大了,大約為1-2倍的差距。
我們可以把IOC容器的工作模式看做是工廠模式的昇華,可以把IOC容器看作是一個工廠,這個工廠裡要生產的物件都在配置檔案中給出定義,然後利用程式語言的的反射程式設計,根據配置檔案中給出的類名生成相應的物件。從實現來看,IOC是把以前在工廠方法裡寫死的物件生成程式碼,改變為由配置檔案來定義,也就是把工廠和物件生成這兩者獨立分隔開來,目的就是提高靈活性和可維護性。
6. IOC容器的一些產品
Sun ONE技術體系下的IOC容器有:輕量級的有Spring、Guice、Pico Container、Avalon、HiveMind;重量級的有EJB;不輕不重的有JBoss,Jdon等等。Spring框架作為Java開發中SSH(Struts、Spring、Hibernate)三劍客之一,大中小專案中都有使用,非常成熟,應用廣泛,EJB在關鍵性的工業級專案中也被使用,比如某些電信業務。
.Net技術體系下的IOC容器有:Spring.Net、Castle等等。Spring.Net是從Java的Spring移植過來的IOC容器,Castle的IOC容器就是Windsor部分。它們均是輕量級的框架,比較成熟,其中Spring.Net已經被逐漸應用於各種專案中。
7. 使用IOC框架應該注意什麼
使用IOC框架產品能夠給我們的開發過程帶來很大的好處,但是也要充分認識引入IOC框架的缺點,做到心中有數,杜絕濫用框架。
第一、軟體系統中由於引入了第三方IOC容器,生成物件的步驟變得有些複雜,本來是兩者之間的事情,又憑空多出一道手續,所以,我們在剛開始使用IOC框架的時候,會感覺系統變得不太直觀。所以,引入了一個全新的框架,就會增加團隊成員學習和認識的培訓成本,並且在以後的執行維護中,還得讓新加入者具備同樣的知識體系。
第二、由於IOC容器生成物件是通過反射方式,在執行效率上有一定的損耗。如果你要追求執行效率的話,就必須對此進行權衡。
第三、具體到IOC框架產品(比如:Spring)來講,需要進行大量的配製工作,比較繁瑣,對於一些小的專案而言,客觀上也可能加大一些工作成本。
第四、IOC框架產品本身的成熟度需要進行評估,如果引入一個不成熟的IOC框架產品,那麼會影響到整個專案,所以這也是一個隱性的風險。
我們大體可以得出這樣的結論:一些工作量不大的專案或者產品,不太適合使用IOC框架產品。另外,如果團隊成員的知識能力欠缺,對於IOC框架產品缺乏深入的理解,也不要貿然引入。最後,特別強調執行效率的專案或者產品,也不太適合引入IOC框架產品,象WEB2.0網站就是這種情況。

相關推薦

springIOC底層詳

IOC底層原理 Ioc實現的技術      (1)xml配置檔案      (2)dom4j解析xml      (3)工廠模式      (4)反射 通過IOC,我們如果改掉UserService

springIoc技術是怎樣實現的 原文地址 : http://blog.csdn.net/liang5603/article/details/52002994

ioc容器 可能 深入 修改 知識 動態 出現 工廠方法 邏輯 1. IoC理論的背景我們都知道,在采用面向對象方法設計的軟件系統中,它的底層實現都是由N個對象組成的,所有的對象通過彼此的合作,最終實現系統的業務邏輯。圖1:軟件系統中耦合的對象如果我們打開機械式手表的後蓋,

springIoc技術是怎樣實現

4. IOC為我們帶來了什麼好處 我們還是從USB的例子說起,使用USB外部裝置比使用內建硬碟,到底帶來什麼好處? 第一、USB裝置作為電腦主機的外部裝置,在插入主機之前,與電腦主機沒有任何的關係,只有被我們連線在一起之後,兩者才發生聯絡,具有相關性。所以,無論兩者中的任何一方出現什麼的問題,都不會影響另一

對於springIOC和AOP的理解及程式碼簡單實現

IoC(Inversion of Control): 在傳統的java程式編寫中如果呼叫方法或類者,必須要對被呼叫者進行例項化,即必須要通過new 被呼叫者類,才能對被呼叫者類中的方法、成員進行操作。在開發某一個專案時必然會出現很多類來完善專案的需求,並且類與類

springIoc的模擬實現

1、IOC Ioc—Inversion of Control,即“控制反轉”,不是什麼技術,而是一種設計思想。Ioc意味著將你設計好的物件交給容器控制,而不是傳統的在你的物件內部直接控制。即建立物件不採用new的方式建立物件,IoC是有專門一個容器來建立這些物件,即由Ioc

spring Autowired註釋以及如何使用介面物件實現

@Autowired 註釋,它可以對類成員變數、方法及建構函式進行標註,完成自動裝配的工作。 通過 @Autowired的使用來消除 set ,get方法。在使用@Autowired之前,我們對一個bean配置起屬性時,是這用用的 <property name="

SSH各個框架的作用以及Spring AOP,IOC,DI詳

在SSH框假中spring充當了管理容器的角色。我們都知道Hibernate用來做持久層,因為它將JDBC做了一個良好的封裝,程式設計師在與資料庫進行互動時可以不用書寫大量的SQL語句。Struts

SpringIOC配置xml實現IOC註解實現

1.什麼是spring spring 是分層的JavaSE/EE輕量級應用開源框架,已控制反轉IOC和麵向切面程式設計AOP為核心,提供了展現層SpringMVC, 和持久層Srping JDBC以及事務管理等。 spring是一個開源框架,為了解決企業應用開發的複雜性而

Struts2+Spring+Hibernate+Jbpm技術實現Oa(Office Automation)辦公系統第一天框架搭建

chan gdi ssi 4.5 war javassist can eve 配置文件 =============編碼規範,所有文健,所有頁面,所有數據庫的數據表都采用UTF-8編碼格式,避免亂碼;===========開發環境:jdk1.7+tomcat8.0+mys

commons-logging日誌實現

truct illegal 工廠 man int 行為 efault context buffered 一、需要解耦 日誌是實際應用中的一個重要部分,日誌系統也有許多開源的實現,如java.util.logging, logback, log4j系列等。

《Java從入門到放棄》入門篇:springIOC的註入姿勢

java ioc spring IOC到底是個什麽東東呢?控制反轉(Inversion of Control,英文縮寫為IoC),其實就是這個東東。你隨便百度一下就會得到比較書面的解釋:通過引入實現了IoC模式的IoC容器,即可由IoC容器來管理對象的生命周期、依賴關系等,從而使得應用程序的配置和

SpringIOC容器對數組,集合的相關bean的裝配

art prop emp pri val 對數 try ioc容器 blog <bean id="department" class="com.pojo.Department"> <property name="name" val

SpringIOC和AOP的理解

ted program 條件 ogr class spring配置 所有 com 語法 IOC:控制反轉也叫依賴註入。利用了工廠模式。  為了方便理解,分解成每條以便記憶。 1.將對象交給容器管理,你只需要在spring配置文件總配置相應的bean,以及設置相關的屬性,讓

SpringIOC和AOP的詳細解釋

獲得 當我 行為 bean spring 完成 耦合 模式 初始化 我們是在使用Spring框架的過程中,其實就是為了使用IOC,依賴註入,和AOP,面向切面編程,這兩個是Spring的靈魂。 主要用到的設計模式有工廠模式和代理模式。 IOC就是典型的工廠模式,通過sess

Spring定時器實現

很多 xmlns ice ... spring3 runtime pack tcl 首字母 在一些工作需要使用到定時器,Spring很好的集成了定時器的功能! 在Spring 中使用Quartz,本文介紹Spring3.0以後自主開發的定時任務工具,spring task

SpringAop的實現

Spring中AOP的實現分為兩種: 一、Java配置實現 1、通過註解定義攔截規則 2、通過方法路徑定義攔截規則 二、XML配置實現 1、通過註解定義攔截規則 2、通過方法路徑定義攔截規則  一、Java配置實現 (1)Java配置實現,定義一個註解

Spring-IOC-Bean的初始化-循環依賴的解決

creation reference single 填充 hash 可能 target get 完美 前言 在實際工作中,經常由於設計不佳或者各種因素,導致類之間相互依賴。這些類可能單獨使用時不會出問題,但是在使用Spring進行管理的時候可能就會拋出BeanCurren

對於springioc的理解(淺顯易懂)

目錄 ioc是什麼? 首先ioc是Inversion of Control的縮寫 ,翻譯成中文就是:控制反轉的意思。接下來就把這個詞拆開來解釋 如何理解“控制”? 之前我們通過 "類名 物件名 = new 類名( )"的方式進行物件的建立,也就是說

EventBus實現,使用詳

1,建立一個springboot專案。結構如下: 2,引入jar包 <dependencies> <dependency> <groupId>org.springframework.boot</groupId>

人工智慧 人臉識別 使用MQ實現以及非同步

從之前的人臉識別的文章來看,使用到mq中間處理的主要在捉拍機獲取到的人臉識別的特徵傳送到rabbitMQ,然後單張人臉註冊的服務進行消費,這時候就是實現了服務之間的非同步處理以及解耦的作用 還有之前的批量處理上傳的人臉特徵的服務,使用的是同步的方式,這種方式確實有點low,需要非同步來處理提