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

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

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

瀏覽:21日期: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久久,三上悠亚国产精品一区二区三区
亚洲黄色中文字幕| 99视频在线精品国自产拍免费观看| 欧美不卡高清| 91亚洲国产高清| 福利精品在线| 中文字幕亚洲在线观看| 中文无码久久精品| 蜜桃视频一区二区三区在线观看| 岛国av在线播放| 首页国产精品| 免费高潮视频95在线观看网站| 精品国产美女a久久9999| 欧美91在线|欧美| 精品成人18| 久久久久久夜| 电影亚洲精品噜噜在线观看| 免费视频亚洲| 玖玖玖国产精品| 亚洲v天堂v手机在线| 亚洲精品日本| 亚洲精品欧美| 欧美日韩亚洲国产精品| 国产精品毛片aⅴ一区二区三区| 你懂的国产精品永久在线| 欧美1区二区| 国产精品久久观看| 亚洲福利国产| 免费精品视频在线| 97久久中文字幕| 精品久久久网| 色爱综合av| 性色一区二区| 亚洲狼人精品一区二区三区| 91精品丝袜国产高跟在线| 国产女人18毛片水真多18精品| 欧美亚洲tv| 久久中文精品| 久久国产成人午夜av影院宅| 国产一级一区二区| 91麻豆精品| 91日韩欧美| 亚洲欧美综合| 日韩中出av| 精品久久中文| 激情综合网址| 亚洲精品福利| 精品国产91| 欧美成人日韩| 日本欧美一区二区在线观看| 国产在线不卡一区二区三区| 99精品视频在线| 黄色成人精品网站| 日韩精品三级| 国产美女高潮在线| 丝袜美腿亚洲一区| 麻豆中文一区二区| 91精品电影| 国产欧美午夜| 激情欧美亚洲| 国产精品网址| 欧美在线亚洲综合一区| 日韩av中文字幕一区二区三区| 国产精品99一区二区三区| 91久久中文| 久久精品亚洲| 伊人久久亚洲热| 日韩国产欧美在线播放| 久久成人高清| 免费观看久久av| av中文资源在线资源免费观看| 久久香蕉网站| 韩日一区二区| 亚洲韩日在线| 麻豆视频一区二区| 丝袜a∨在线一区二区三区不卡| 久久精品观看| 蜜桃久久精品一区二区| 精品视频一区二区三区在线观看| 99pao成人国产永久免费视频 | 免费国产自久久久久三四区久久| 国产精久久久| 国产精品久久777777毛茸茸| 国产精品地址| 亚洲一区导航| 92国产精品| 亚洲高清av| 日本精品国产| 亚洲综合日韩| 亚洲欧美久久精品| 手机精品视频在线观看| 亚洲女同中文字幕| 久久国产电影| 亚洲色图网站| 日本欧美在线看| 国产精选在线| 欧美日韩国产综合网| 国产在线一区不卡| 免费人成精品欧美精品| 精品国产18久久久久久二百| 日本不卡不码高清免费观看| 久久国产视频网| 91亚洲一区| 色偷偷色偷偷色偷偷在线视频| 亚洲精品午夜av福利久久蜜桃| 99riav1国产精品视频| 国产精品极品| 偷拍亚洲精品| 精品72久久久久中文字幕| 欧美伊人久久| 久久蜜桃av| 欧美亚洲一区二区三区| 三级久久三级久久久| 久久久久久一区二区| 国产精品尤物| 久久精品欧美一区| 国产亚洲久久| 激情五月综合| 日韩黄色大片网站| 国内精品麻豆美女在线播放视频| 欧美片第1页综合| 日本精品一区二区三区在线观看视频| 日韩影片在线观看| 伊人久久高清| 欧美www视频在线观看| 97成人超碰| 日韩久久一区| 日本亚洲最大的色成网站www| 亚洲欧美日韩国产一区二区| 五月综合激情| 欧美精品黄色| 好吊日精品视频| 99在线精品免费视频九九视 | 国产一区亚洲| 久久久天天操| 亚洲婷婷在线| 在线观看免费一区二区| 国产91在线播放精品| 久久中文字幕一区二区| 国产精品久久久久久久久久白浆| 欧美欧美黄在线二区| 欧美精品三级在线| 国产精品网站在线看| 国产精品.xx视频.xxtv| 卡一精品卡二卡三网站乱码| 九九久久国产| 成人在线黄色| 日韩三区在线| 国产综合亚洲精品一区二| 精品一区亚洲| 免费日韩视频| 男女精品网站| 蜜桃视频一区二区| 欧美日韩xxxx| 国产一区二区三区天码| 日韩欧美国产精品综合嫩v| 香蕉人人精品| 九九久久国产| 亚洲精品影视| 久久久久免费| 日韩网站在线| 日韩激情视频网站| japanese国产精品| 精品国产中文字幕第一页 | 日本在线观看不卡视频| 免费一区二区视频| 欧美视频久久| 精品视频高潮| 999国产精品| 亚洲一区二区三区久久久| 日韩高清成人在线| 国产精品4hu.www| 偷拍精品精品一区二区三区| 五月天综合网站| 日本在线不卡视频一二三区| 国产精品99久久免费观看| 91看片一区| 久久午夜影视| 国产精品免费精品自在线观看| 日韩中文欧美| 一区二区亚洲视频| 国产亚洲人成a在线v网站| 吉吉日韩欧美| 蜜臀久久99精品久久久久宅男 | 久久精品国产亚洲一区二区三区| 亚洲午夜精品久久久久久app| 婷婷综合国产| 美女网站视频一区| 欧美一区影院| 女主播福利一区| 麻豆成人av在线| 亚洲一区区二区| 精品国产不卡一区二区| 亚洲成人免费| 久久精品国产久精国产| 日韩中文字幕亚洲一区二区va在线 | 首页国产精品| 日韩精品首页| 美女尤物久久精品| 国产专区一区| 亚洲一级少妇|