javascript
Spring核心(ioc控制反转)
IoC,Inversion Of Control 即控制反轉,由容器來管理業務對象之間的依賴關系,而非傳統方式中的由代碼來管理。
其本質。即將控制權由應用程序代碼轉到了外部容器,控制權的轉移就是所謂的反轉,其帶來的最大的優點是減少了業務對象之間的依賴程度,即實現了解耦。
?
Spring的IoC容器主要使用DI(Dependency Injection,依賴注入)方式實現的。不須要主動查找,對象的查找、定位和創建所有由容器管理,容器會將符合依賴關系的對象通過屬性(setter等)或者構造函數傳遞給須要的對象。
?
使用IoC能夠帶來下面優點:
1、查詢依賴操作和應用代碼分離。大量降低了Factory和Singleton的數量,使代碼層次更加清晰。主要原因是我們不再查找、定位、創建和管理對象之間的依賴關系了。都交給IoC容器管理了
2、沒有侵入性,不須要依賴容器的API,也不須要實現一些特殊接口。這樣我們的受控對象能夠搬出容器進而單獨使用。
3、能夠從IoC容器中直接獲得一個對象然后直接使用。而無需考慮對象的創建過程。(工廠模式)
?
從網上看了一個樣例,認為不錯。貼過來幫助我們理解:
我們是怎樣找女朋友的?常見的情況是,我們到處去看哪里有長得美麗身材又好的mm。然后打聽她們的興趣愛好、qq號、電話號、ip號、iq號………,想辦法認識她們。投其所好送其所要,然后嘿嘿……這個過程是復雜深奧的。我們必須自己設計和面對每一個環節。傳統的程序開發也是如此。在一個對象中,假設要使用另外的對象,就必須得到它(自己new一個,或者從JNDI中查詢一個),使用完之后還要將對象銷毀(比方Connection等)。對象始終會和其它的接口或類藕合起來。
? 那么IoC是怎樣做的呢?有點像通過婚介找女朋友,在我和女朋友之間引入了一個第三者:婚姻介紹所。婚介管理了非常多男男女女的資料,我能夠向婚介提出一個列表,告訴它我想找個什么樣的女朋友,比方長得像李嘉欣,身材像林熙雷。唱歌像周杰倫。速度像卡洛斯,技術像齊達內之類的。然后婚介就會依照我們的要求。提供一個mm,我們僅僅須要去和她談戀愛、結婚即可了。
簡單明了,假設婚介給我們的人選不符合要求,我們就會拋出異常。整個過程不再由我自己控制,而是有婚介這樣一個類似容器的機構來控制。Spring所倡導的開發方式就是如此。全部的類都會在spring容器中登記。告訴spring你是個什么東西,你須要什么東西,然后spring會在系統執行到適當的時候,把你要的東西主動給你,同一時候也把你交給其它須要你的東西。全部的類的創建、銷毀都由 spring來控制,也就是說控制對象生存周期的不再是引用它的對象,而是spring。對于某個詳細的對象而言。曾經是它控制其它對象,如今是全部對象都被spring控制。所以這叫控制反轉
?
事實上,我們能夠把IoC看做是工廠模式的升華。IoC好比是一個大工廠,僅僅只是在這個大工廠里生成的對象都是在XML文件里定義的。然后利用Java的反射實例化。
在沒有Spring之前我們也是這么做的,僅僅是Spring的IoC更加強大完好。
?
有利就有斃,IoC也有一定的弊端:
1、使用反射變成,在效率上有些損耗。
2、缺乏更加智能的IDE,寫XML中時,錯誤不easy暴露。推遲到執行期才干發現。
?
但相對于IoC提高的維護性和靈活性來說,這點缺點又顯得微不足道
?
?寫到最后,忽然想到《走遍美國》里。唱片公司制片在rebaca錄制完唱片后對她說的一句話:Don't call us,we'll call you
用這句話來形容IoC再合適只是。
總結
以上是生活随笔為你收集整理的Spring核心(ioc控制反转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转】 最新版chrome谷歌浏览器Aj
- 下一篇: gradle idea java ssm