日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Spring.Net IOC依賴注入原理流程解析

瀏覽:20日期:2023-08-26 15:54:19

一。什么是IOC.(Inversion of Control)

IOC,即控制反轉。不是什么技術,而是一種思想。在傳統開發中,我們需要某個對象時,就手動去new一個依賴的對象。而IOC意味著將對象的控制權交給容器,而不在是直接在對象的內部控制。如何理解IOC呢?理解好IOC的關鍵是要明確‘誰控制了誰,控制了什么?為何是反轉?(有反轉既有正轉),哪些反面反轉了。’

誰控制了誰?控制了什么?:傳統程序設計,我們直接在對象內部通過new來創建對象,是程序主動去創建對象。而在ioc中,是通過一個容器去創建這些對象,即IOC容器控制對象的創建;誰控制了誰?當然是IOC容器創建了對象;控制了什么?當然是控制了外部資源的獲取。(不只是對象,比如包括文件等)

為何是反轉?哪些方面反轉了?:有反轉就有正轉。傳統應用程序由我們自己在對象中主動獲取創建依賴對象,也就是正轉;而反轉則是由容器來創建及注入依賴對象。為什么是反轉呢?因為由容器幫我們查找及注入依賴,對象只是被動的接受依賴對象,所以是反轉。哪些方面反轉了?依賴對象的獲取被反轉了。

圖列說明

圖一. 傳統程序設計,主動創建相關對象,再組合起來

Spring.Net IOC依賴注入原理流程解析

圖二。當有了IOC/DI容器之后,客戶端不在主動創建這些對象

Spring.Net IOC依賴注入原理流程解析

二。iOC能夠做什么?

IOC是一種思想,而不是新的技術。一個重要的面向對象編程的法則,它能指導我們如何設計出松耦合,更優良的程序。傳統的應用程序都是我們在類的內部,主動的創建應用對象,從而導致類與類之間,高耦合,難于測試。有了IOC容器,就將查找和創建依賴對象的控制交給了容器,由容器進行注入組合對象,所以對象與對象之間,是松散耦合的,使得程序的整個體系結構變得非常靈活。

其實IOC對編程帶來最大的變化,不是從代碼上的,而是思想上,發生了‘主從換位’的變化。應用程序原本是老大,需要什么資源,都是主動去獲取。但是在IOC/DI中,應用程序變成了被動了,被動的等待容器來創建并注入它所需要的資源。

IOC很好的體現了面向對象設計原則,好萊塢法則:“別找我們,我們找你”。即由IOC容器幫對象去找依賴的對象,并注入,而不是由對象主動去找。

三。IOC和DI

DI(Dependency Injection),即依賴注入。是組件之間的關系由容器在在運行期確定,形象的說,即由容器動態的將某個依賴關系注入到組件之中。依賴注入的目的并非為軟件系統帶來更多功能,而是為了提升組件重用的頻率,并為系統搭建一個靈活、可擴展的平臺。通過依賴注入機制,我們只需要通過簡單的配置,而無需任何代碼就可指定目標需要的資源,完成自身的業務邏輯,而不需要關心具體的資源來自何處,由誰實現。

理解DI的關鍵是:‘誰依賴了誰,為什么需要依賴,誰注入了誰,注入了什么’:

誰依賴了誰:當然是應用程序依賴了容器為什么需要依賴:應用程序需要IOC容器提供對象所需要的資源誰注入了誰:很明顯是IOC容器注入應用程序某個對象,應用程序依賴的對象注入了什么:就是注入某個對象所需要的外部資源(包括對象,資源,文件,常量數據)

IOC和DI之間,是同一個概念不同角度的描述。相對于IOC而言,“依賴注入“明確描述” 被注入對象依賴IOC容器配置依賴對象”。

四 。Spring.Net之IOC的配置

<?xml version='1.0' encoding='utf-8' ?><configuration> <configSections> <sectionGroup name='spring'> <section name='context' type='Spring.Context.Support.ContextHandler, Spring.Core'/> <section name='objects' type='Spring.Context.Support.DefaultSectionHandler, Spring.Core' /> </sectionGroup> </configSections> <spring> <context> <!--加載容器所需的配置文件,默認是config文件.這里單獨定義一個文件xml,來配置容器.需要注意的是,xml文件屬性需要設置為始終復制或如果較新規則復制--> <resource uri='config://spring/objects'/> <resource uri='F:C#SpingNetIOCV2iocioc.xml'/> </context> <objects xmlns='http://www.springframework.net'> <!--<object name='myIoc' type='SpingNetIOCV2.model.Moveis,SpingNetIOCV2'></object>--> </objects> </spring

ioc.xml代碼段配置如下:

<?xml version='1.0' encoding='utf-8' ?><objects> <object name='myIoc' type='SpingNetIOCV2.model.Moveis,SpingNetIOCV2'></object></objects>

控制臺程序main方法中,引用Spring.Context命令空間,以便IApplicationContext接口訪問IOC容器。,下面通過容器,獲取一個創建的對象:

public static void Main(string[] args) { //獲取容器對象 IApplicationContext context = ContextRegistry.GetContext(); //通過容器創建對象 Moveis m =(Moveis)context.GetObject('myIoc'); Console.WriteLine(m.GetType().Name);//結果輸出Moveis Console.ReadKey(); }

A。通過屬性注入依賴對象 

<?xml version='1.0' encoding='utf-8' ?><objects> <!--MovieLister對象,依賴SimpleMovieTXTFinder獲取對應的電影資源--> <object name='myIoc' type='SpingNetIOCV2.model.MovieLister,SpingNetIOCV2'> <property name='move' ref='SimpleMovieTXTFinder'></property> </object> <!--SimpleMovieTXTFinder類是加載獲取存儲在txt文本中的電影信息工具類--> <object name='SimpleMovieTXTFinder' type='SpingNetIOCV2.model.SimpleMovieTXTFinder,SpingNetIOCV2'></object></objects>

public static void Main(string[] args) { //獲取容器對象 IApplicationContext context = ContextRegistry.GetContext(); //通過容器創建對象 //Moveis m =(Moveis)context.GetObject('myIoc'); //通過屬性注入(set值方法注入)。對象MovieLister依賴IMoveis,通過容器創建依賴對象,注入到對象MovieLister的move屬性中 //容器先創建MovieLister對象,看MovieLister類是否需要注入。如果需要注入,則創建所需的依賴對象SimpleMovieTXTFinder,然后通過屬性。注入到MovieLister對象中 MovieLister ml = (MovieLister)context.GetObject('myIoc'); Console.WriteLine(ml.GetType().Name);//結果輸出MovieLister ml.GetMoves(1); Console.ReadKey(); }

B。構造器注入依賴

<?xml version='1.0' encoding='utf-8' ?><objects> <!--MovieLister對象,依賴SimpleMovieTXTFinder獲取對應的電影資源--> <object name='myIoc' type='SpingNetIOCV2.model.MovieLister,SpingNetIOCV2'> <property name='move' ref='SimpleMovieTXTFinder'></property> </object> <!--SimpleMovieTXTFinder類是加載獲取存儲在txt文本中的電影信息工具類--> <object name='SimpleMovieTXTFinder' type='SpingNetIOCV2.model.SimpleMovieTXTFinder,SpingNetIOCV2'> <!--<constructor-arg/>節點就是用來為構造器提供參數的IoC容器使用某個內置的類型轉換器將字符串“move.txt”轉換為System.IO.FileInfo--> <constructor-arg index='0' value='../../move.txt'/> </object></objects>

文本move.text是電影文本列表,IOC容器通過構造器注入,將外部資源注入到了MovieLister對象中。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品久久久久77777丨| 日本va欧美va欧美va精品| 蜜桃视频一区二区| 在线亚洲精品| 日韩欧美另类一区二区| 日韩不卡免费高清视频| 免费日韩视频| 国产精品三上| 久久高清精品| 亚洲先锋成人| 亚洲午夜91| 亚洲一区国产一区| 欧美日韩视频一区二区三区| 美女高潮久久久| 国产精品一区亚洲| 国产福利亚洲| 精品99久久| 三级在线看中文字幕完整版| 精精国产xxxx视频在线播放 | 91精品国产自产精品男人的天堂| 日本aⅴ精品一区二区三区| 久久狠狠亚洲综合| 亚洲18在线| 国产精品国码视频| 美女久久久久久| 日韩国产综合| 国产美女高潮在线观看| 久久免费影院| 高清在线一区| 色天使综合视频| 日韩另类视频| 亚洲国内精品| 99视频+国产日韩欧美| aⅴ色国产欧美| 综合视频一区| 国内揄拍国内精品久久| 色在线视频观看| 一本色道久久精品| 久久xxxx精品视频| 国产欧美激情| 精品欧美日韩精品| 国产精品免费不| 欧美片第1页| 亚洲大全视频| 国产欧美日韩一区二区三区四区 | 精品色999| 五月综合激情| 亚洲自啪免费| 久久成人av| 日韩欧美另类一区二区| 亚洲激精日韩激精欧美精品| 欧美影院精品| 美女精品视频在线| 亚久久调教视频| 中文国产一区| 少妇精品久久久一区二区| 麻豆精品新av中文字幕| av高清不卡| 免费在线欧美视频| 国产精品香蕉| 在线精品小视频| 久久精品av麻豆的观看方式| 国产极品模特精品一二| 欧美~级网站不卡| 蜜臀av性久久久久蜜臀aⅴ流畅| 日本aⅴ亚洲精品中文乱码| 综合日韩av| 日韩中文字幕一区二区高清99| 日韩深夜视频| 亚洲精品欧美| 亚洲黄色中文字幕| 亚洲少妇在线| 男人的天堂久久精品| 手机在线电影一区| 国产精品91一区二区三区| 国产欧美一区二区三区精品观看| 国产美女高潮在线观看| 欧美日韩亚洲一区三区| 欧美二三四区| 亚欧洲精品视频在线观看| 亚洲精品一级二级| 日韩欧美中文字幕电影| 亚洲a一区二区三区| 婷婷五月色综合香五月| 亚洲一级黄色| 日韩亚洲精品在线观看| 精品美女在线视频| 欧美日韩一区自拍| 999国产精品| 精品国产三区在线| 蜜臀91精品一区二区三区| 91精品一区二区三区综合| 日本久久二区| 三级小说欧洲区亚洲区| 亚洲美女91| 久久男人av资源站| 精品国产乱码久久久久久樱花 | 日韩在线成人| 国产在线欧美| 国内自拍视频一区二区三区| 国产探花一区二区| 波多野结衣一区| 亚洲成人av观看| 国产精品亚洲欧美一级在线| 亚洲性视频h| 久久av综合| 亚洲精品黄色| 亚洲综合二区| 久久天堂av| 亚洲精品国产嫩草在线观看 | 欧美成人精品| 日韩手机在线| 亚洲欧美激情诱惑| 国产精品成人国产| 日本成人在线视频网站| 欧美日韩国产在线一区| 国产精品二区不卡| 精品中文字幕一区二区三区| 美日韩精品视频| 亚洲欧美日本日韩| 中文字幕系列一区| 国产成人精品一区二区三区免费 | 亚洲精品无播放器在线播放| 色婷婷精品视频| 精品久久在线| 国产精品国产三级在线观看| 综合激情一区| 免费高清在线一区| 1024精品久久久久久久久| 欧美不卡视频| 蜜桃视频欧美| 国产亚洲亚洲| 欧美日韩黑人| 免费看日韩精品| 日韩一区二区免费看| 亚洲电影有码| 亚洲无线一线二线三线区别av| 久久久久久夜| 久久精品免费一区二区三区| 欧美日韩视频一区二区三区| 男女激情视频一区| 色一区二区三区| 亚洲一级黄色| 欧美手机在线| 三级精品视频| av一区二区高清| 一区二区亚洲精品| 婷婷综合成人| 国产三级一区| 国产激情在线播放| 日韩大片在线| 久久高清国产| 色8久久久久| 国产精品免费大片| 久久久久久久久成人| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 中文一区二区| 91久久视频| 午夜亚洲精品| 日本欧美久久久久免费播放网| 亚洲精品自拍| 国产精品第十页| 福利欧美精品在线| 欧美特黄一区| 久久黄色影视| 999精品色在线播放| 免费看欧美美女黄的网站| 久久99蜜桃| 欧美精品一卡| 国产精品15p| 色乱码一区二区三区网站| 99视频精品免费观看| 亚洲手机在线| 青草国产精品| 久久影院资源站| 黄色免费成人| 综合欧美精品| 水蜜桃久久夜色精品一区| 亚洲天堂久久| 青青草国产成人99久久| 老色鬼精品视频在线观看播放| 99精品电影| 亚洲一区观看| 欧美好骚综合网| 日韩一区欧美| 亚洲国产专区校园欧美| 深夜福利亚洲| 精品国产不卡| 蜜桃成人av| 综合色一区二区| 成人在线黄色| 欧美日韩国产在线一区| 国产精品日本一区二区三区在线| 国产精品伦理久久久久久| 亚洲深深色噜噜狠狠爱网站| 国产精品毛片视频| 免费久久99精品国产自在现线| 奇米色欧美一区二区三区| 日本а中文在线天堂| 日本中文字幕不卡|