日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

反射 + 配置文件 实现IOC容器

發(fā)布時間:2025/6/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 反射 + 配置文件 实现IOC容器 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

IOC實現(xiàn):


IOC容器我們僅僅停留在知道上是不行的,我們要動手做印象對更深刻,那么我給大家看一個代碼,看看代碼中IOC容器的實現(xiàn)。


代碼實現(xiàn):


創(chuàng)建一個類庫:


解決方案的類庫建立:




創(chuàng)建一個實體類:User:


[csharp]?view plaincopyprint?
  • <span?style="font-size:18px;">using?System;??
  • using?System.Collections.Generic;??
  • using?System.Text;??
  • ??
  • namespace?Spring.Demo.Model??
  • {??
  • ????///?<summary>??
  • ????///?用戶類??
  • ????///?</summary>??
  • ????public?class?Users??
  • ????{??
  • ????????///?<summary>??
  • ????????///?編號??
  • ????????///?</summary>??
  • ????????private?int?_oid;??
  • ????????public?int?Oid??
  • ????????{??
  • ????????????get?{?return?_oid;?}??
  • ????????????set?{?_oid?=?value;?}??
  • ????????}??
  • ??
  • ????????///?<summary>??
  • ????????///?姓名??
  • ????????///?</summary>??
  • ????????private?string?_name;??
  • ????????public?string?Name??
  • ????????{??
  • ????????????get?{?return?_name;?}??
  • ????????????set?{?_name?=?value;?}??
  • ????????}??
  • ??
  • ????????///?<summary>??
  • ????????///?性別??
  • ????????///?</summary>??
  • ????????private?string?_sex;??
  • ????????public?string?Sex??
  • ????????{??
  • ????????????get?{?return?_sex;?}??
  • ????????????set?{?_sex?=?value;?}??
  • ????????}??
  • ??
  • ????????///?<summary>??
  • ????????///?年齡??
  • ????????///?</summary>??
  • ????????private?int?_age;??
  • ????????public?int?Age??
  • ????????{??
  • ????????????get?{?return?_age;?}??
  • ????????????set?{?_age?=?value;?}??
  • ????????}??
  • ????}??
  • }</span>??

  • 創(chuàng)建IUsers的接口:


    [csharp]?view plaincopyprint?
  • <span?style="font-size:18px;">using?System;??
  • using?System.Collections.Generic;??
  • using?System.Text;??
  • namespace?Spring.Demo.Service??
  • {??
  • ????public?interface?IUsers??
  • ????{??
  • ????????///?<summary>??
  • ????????///?返回用戶的詳細信息的方法??
  • ????????///?</summary>??
  • ????????///?<returns></returns>??
  • ????????string?GetUserInfo();??
  • ????}??
  • }??
  • </span>??

  • 創(chuàng)建一個實現(xiàn)IUsers接口的實現(xiàn)類:


    [csharp]?view plaincopyprint?
  • <span?style="font-size:18px;">using?System;??
  • using?System.Collections.Generic;??
  • using?System.Text;??
  • using?Spring.Demo.Service;??
  • using?Spring.Demo.Model;??
  • ??
  • namespace?Spring.Demo.Compontext??
  • {??
  • ????public?class?UsersCompontents?:?IUsers??
  • ????{??
  • ????????public?UsersCompontents()??
  • ????????{?}??
  • ?
  • ????????#region?獲取用戶信息??
  • ????????public?string?GetUserInfo()??
  • ????????{??
  • ????????????Users?user?=?new?Users();??
  • ????????????user.Oid?=?1;??
  • ????????????user.Name?=?"Beniao";??
  • ????????????user.Sex?=?"Boy";??
  • ????????????user.Age?=?25;??
  • ??
  • ????????????return?string.Format("編號:{0}--->姓名:{1}--->性別:{2}--->年齡:{3}",??
  • ????????????????user.Oid,??
  • ????????????????user.Name,??
  • ????????????????user.Sex,??
  • ????????????????user.Age);??
  • ????????}??
  • ????????#endregion??
  • ????}??
  • }</span>??

  • 創(chuàng)建測試類:


    [csharp]?view plaincopyprint?
  • <span?style="font-size:18px;">using?ITOO.Library.Core.AOP;??
  • using?Spring.Context;??
  • using?Spring.Demo.Service;??
  • using?System;??
  • using?System.Collections.Generic;??
  • using?System.Configuration;??
  • using?System.Linq;??
  • using?System.Text;??
  • ??
  • namespace?Sping.Demo.SimpleTest??
  • {??
  • ????class?Program??
  • ????{??
  • ????????static?void?Main(string[]?args)??
  • ????????{??
  • ??
  • ????????????IUsers?studentChangeBll?=?SpringHelper.GetObject<IUsers>("Users");??
  • ??
  • ????????????Console.WriteLine(studentChangeBll.GetUserInfo());??
  • ????????????Console.Read();??
  • ????????}??
  • ????}??
  • }</span>??

  • 在控制臺程序中創(chuàng)建一個配置文件:


    [csharp]?view plaincopyprint?
  • <span?style="font-size:18px;"><?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>??
  • ??????<resource?uri="config://spring/objects"/>??
  • ????</context>??
  • ????<objects?xmlns="http://www.springframework.net">??
  • ??????<!--這的配置根據(jù)實際的程序來的,UsersCompontents是程序集Spring.Demo.Compontext下的一個類-->??
  • ??????<object?name="Users"??
  • ??????????????type="Spring.Demo.Compontext.UsersCompontents,Spring.Demo.Compontext"??singleton="false"?>??
  • ??????</object>??
  • ????</objects>??
  • ??</spring>??
  • </configuration></span>??

  • 運行后,發(fā)現(xiàn)SpringHelper卻小引用。我們一般寫代碼中我們是這樣寫的:


    [csharp]?view plaincopyprint?
  • <span?style="font-size:18px;">//從config文件中取得程序集信息??
  • IApplicationContext?context?=?ConfigurationManager.GetSection("spring/context")??
  • ???????????????????????????????as?IApplicationContext;??
  • //調(diào)用方法??
  • //Users為config文件里的配置節(jié)??
  • //<object?name="Users"?????????
  • //????????type="Spring.Demo.Compontext.UsersCompontents,Spring.Demo.Compontent">??
  • //</object>??
  • IUsers?user?=?context.GetObject("Users")?as?IUsers;</span>??

  • 這樣我們就可以從配置文件中將對象取出來,但是我們都不想在代碼中有多余的代碼,不能每一次new對象的時候,我們都要寫一遍這句話:IApplicationContext context = ConfigurationManager.GetSection("spring/context") as IApplicationContext;這樣就增加了我們維護代碼的成本,因此,我們將這句話封裝起來,封裝的代碼是這樣的:


    創(chuàng)建一個類:SpringHelper:


    [csharp]?view plaincopyprint?
  • <span?style="font-size:18px;">using?System;??
  • using?System.Collections.Generic;??
  • using?System.Linq;??
  • using?System.Text;??
  • using?Spring.Context;??
  • using?Spring.Context.Support;??
  • ??
  • namespace?ITOO.Library.Core.AOP??
  • {??
  • ????public?class?SpringHelper??
  • ????{??
  • ????????///?<summary>??
  • ????????///?Spring容器上下文??
  • ????????///?</summary>??
  • ????????private?static?IApplicationContext?SpringContext??
  • ????????{??
  • ????????????get??
  • ????????????{??
  • ????????????????return?ContextRegistry.GetContext();??
  • ????????????}??
  • ????????}??
  • ??
  • ??
  • ????????///?<summary>??
  • ????????///?獲取配置文件?配置的?對象??
  • ????????///?</summary>??
  • ????????///?<typeparam?name="T"></typeparam>??
  • ????????///?<param?name="objName"></param>??
  • ????????///?<returns></returns>??
  • ????????public?static?T?GetObject<T>(string?objName)?where?T?:?class??
  • ????????{??
  • ????????????return?(T)SpringContext.GetObject(objName);??
  • ????????}??
  • ????}??
  • }??
  • ??
  • ??
  • </span>??

  • 以上的代碼我們就可以將每次讀取配置文件中的那句話去掉了,我們直接就可以寫這樣一句話就可以了:IUsers studentChangeBll = SpringHelper.GetObject<IUsers>("Users");


    這里體現(xiàn)了封裝的重要性,先前我在做AOP的時候,我的師傅看到了類似這樣的代碼的時候,他就跟我討論過這個問題,我當(dāng)時懵懵懂懂,沒有進行下一步的行動,現(xiàn)在想想,問題出現(xiàn)在我根本沒有動手去做,或者知識沒有深入到那個層次,認識這個知識的方面沒有那么深。所有問題,都要動手去做才行。


    總結(jié):


    我們從上面的實踐到分析之后,我們發(fā)現(xiàn)其實我們看似是新的東西,其實我們已經(jīng)學(xué)習(xí)過了,就像IOC容器一樣,我們學(xué)習(xí)過了反射和配置文件,我們發(fā)現(xiàn)其實IOC容器不就是反射和配置文件來實現(xiàn)的嗎,反射和配置文件是我們在大話設(shè)計模式中就已經(jīng)學(xué)習(xí)到了的東西,這都不是新的東西。一個看似復(fù)雜的東西,都是有簡單的東西來組裝成的,我們知道這個,就不會對新的東西有畏懼感了。

    總結(jié)

    以上是生活随笔為你收集整理的反射 + 配置文件 实现IOC容器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 欧美精品人妻一区二区 | 综合色99 | 少妇被黑人到高潮喷出白浆 | 一区二区三区毛片 | 欧美巨大另类极品videosbest | 久久欧洲 | 日韩伦人妻无码 | 第九色激情| 性av免费 | 免费在线观看毛片 | 肥臀熟女一区二区三区 | 亚洲综合色av | 午夜国产免费 | 九九九免费视频 | 69亚洲精品久久久蜜桃小说 | 久久免费在线 | 成人网站在线进入爽爽爽 | 人人cao | 国产精品久久 | 欧美精品一区在线发布 | 欧洲一级视频 | 国产精品videossex久久发布 | 天天色图片 | 韩国三级视频 | 国产欧美不卡 | 色婷婷aⅴ一区二区三区 | 亚洲av无一区二区三区怡春院 | 手机免费av | 国产视频久久久久久 | 久久精品成人av | 国产女18毛片多18精品 | 国产精品久久av无码一区二区 | 超碰天天操| 国产依人| 国产区精品 | 熟女人妻视频 | 销魂美女一区二区 | 中国黄色小视频 | 国产一区二区三区视频在线观看 | 伊人久久在线 | 9191国产精品 | av日日操 | av777777| jizz性欧美23| 日韩福利在线视频 | 日本不卡网 | 国产一区精品在线观看 | 色老大影院 | 俺来也av | 亚洲天堂一区在线观看 | av片在线观看免费 | 免费黄色网页 | 中日韩在线 | 午夜精品福利一区二区 | 久热国产在线 | 喷水在线观看 | 丰满人妻一区二区三区53号 | 国产精品一区麻豆 | 欧美色香蕉 | 欧美亚洲不卡 | 激情女主播 | 亚洲天堂伦理 | 天堂久久爱 | 亚洲国产aⅴ精品一区二区 日韩黄色在线视频 | 成人日韩精品 | 久久亚洲精品中文字幕 | 久久久青 | 天天爽夜夜爽夜夜爽精品 | 岛国av在线播放 | 一区二区三区不卡视频 | 久久久夜色精品 | 一级免费看| 91精品久久久久久粉嫩 | 懂色av中文一区二区三区天美 | 在线观看免费小视频 | 一区二区三区不卡视频在线观看 | 2022av视频 | 欧美日韩激情 | 国产永久免费无遮挡 | 精品一区二区免费看 | 91精品国产综合久久久蜜臀九色 | 日韩一区二区免费在线观看 | 亚洲小视频在线播放 | 成人免费视频一区二区 | 欧美成人动态图 | 亚洲综合专区 | 欧美大浪妇猛交饥渴大叫 | 国产福利在线导航 | 亚洲精品无人区 | 久久久久国色av免费观看性色 | 91涩| 短裙公车被强好爽h吃奶视频 | 天天爱天天爽 | 四虎新网址 | 美女被草 | 精品一区二区在线播放 | 成人免费av片 | 欧美一区二区三区婷婷 | 老妇女性较大毛片 |