SpringNet學習筆記一

来源:http://www.cnblogs.com/ymcome/archive/2016/04/08/5369808.html
-Advertisement-
Play Games

恢復內容開始 最近看了園子里的大神分享的springnet框架的知識,感覺挺不錯的,自己閑下來也研究研究springnet。這幾天看了springnet容器的基礎篇IOC和AOP,也有點個人理解分享一下,記錄一下自己的學習筆記,歡迎大家提出問題一塊研究解決。 入門springnet首先瞭解一下什麼是 ...


---恢復內容開始---

    最近看了園子里的大神分享的springnet框架的知識,感覺挺不錯的,自己閑下來也研究研究springnet。這幾天看了springnet容器的基礎篇IOC和AOP,也有點個人理解分享一下,記錄一下自己的學習筆記,歡迎大家提出問題一塊研究解決。

    入門springnet首先瞭解一下什麼是控制反轉,首先控制反轉(Inversion of Control,英文縮寫為IoC),也叫依賴註入(Dependency Injection)。      個人理解springnet的控制反轉及其像一個複雜的抽象工廠。控制反轉就是將原來由開發人員來創建實例的過程轉換為容器註入完成載入實例,最終實現松耦合。這點和利用抽象工廠來反射動態載入程式集完成實例的創建很相似。純屬個人理解,不足的地方望糾正一下。敘述了控制反轉的用途,下麵來說一下操作。

    總結了一下實現springnet依賴註入的步驟:

  1. 添加程式集的引用
  2. 添加解析節點
  3. 添加spring配置節點和object配置節點
  4. 創建容器上下文

   大致可分為上5點,不足的地方望糾正,下麵寫點代碼演示一下我的依賴註入實現以及和抽象工廠的差別:

    首先新建一個介面IPerson,介面內只提供了Person的方法簽名

namespace Myspringdemo
{
    public interface IPerson
    {
        void Person();
    }
}

在新建一個NewPreson類來繼承IPerson實現介面中的方法

namespace Myspringdemo
{
    public class NewPerson : IPerson
    {
        public void Person()
        {
            Console.WriteLine("我是工廠造的人");
        }
    }
}
View Code

 

 

 為了與抽象工廠做對比,我又建了一個工廠類實現創建實例

namespace Myspringdemo
{
    public class GetFactory
    {
        public static IPerson person;

        public static IPerson Instance()
        {
            person = CallContext.GetData("Person") as IPerson;
            if (person == null)
            {
                person = new NewPerson();
                CallContext.SetData("Person", person);
            }
            return person;
        }


    }
}
GetFactory

然後我們在program類中調用一下

namespace Myspringdemo
{
    public class Program
    {
        static void Main(string[] args)
        {


            IPerson Factoryper = GetFactory.Instance();
            Factoryper.Person();//工廠實現方法


        }


    }
}

結果如下

以上是抽象工廠實現,下麵介紹一下依賴註入的實現

1.引用程式集:Common.Logging.dll和spring.core.dll

2.配置解析節點

  <!--配置spring節點解析類型-->
  <!--configSections節點必須緊跟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>

3.配置spring節點和objects節點,並配置object節點簡單的依賴註入完畢

<!--配置spring.net節點-->
  <spring>
    <context>
      <resource uri="config://spring/objects"/>
    </context>
    <objects xmlns="http://www.springframework.net">
      
      <description>描述文檔</description>
      <!--放置容器里的節點位置-->
      <!--type為將要反射的程式集,寫法為當前命名空間名.類名,命名空間名-->
      <object name="Myspring"      type="Myspringdemo.SpringPerson,Myspringdemo">    </object>
      
    </objects>
  </spring>

OK節點配置完畢,下麵就是調用了,新建一個springperson類來繼承IPerson,並實現介面中的方法

namespace Myspringdemo
{
    public class SpringPerson:IPerson
    {
        public void Person()
        {
            Console.WriteLine("我是spring造的人"); ;
        }
    }
}

實現依賴註入的方法

namespace Myspringdemo
{
    public class Program
    {
        static void Main(string[] args)
        {
            IApplicationContext ctx = ContextRegistry.GetContext();//創建上下文
            IPerson per = ctx.GetObject("Myspring") as IPerson;
            per.Person();//依賴註入實現方法調用


            IPerson Factoryper = GetFactory.Instance();
            Factoryper.Person();//工廠實現方法


        }


    }
}

讓我們來列印一下看看結果

    成功列印了依賴註入的結果,一開始接觸依賴註入感覺和工廠沒有太大區別,搞了幾天後,發現依賴註入的方法確實比工廠可維護性和可擴展性要好一點,效率方面可能也要好一點,這個我沒有做多瞭解,好心的園友可以糾正一下,談談不一樣的理解!

    

---恢復內容結束---


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文由ilanniweb提供友情贊助,首發於爛泥行天下 想要獲得更多的文章,可以關註我的微信ilanniweb 這幾天自己看了下博客的nginx日誌,發現日誌文件發現越來越大。 因為nginx自己不會對日誌文件進行切割,所以打算通過其他方式進行切割,而且為了後續能對nginx日誌文件裡面記錄的數據進... ...
  • sar -n DEV 1 100 1代表一秒統計並顯示一次 100代表統計一百次 使用ntop等工具,就更方便簡單了,不過這個更靈活 P.S. sar在sysstat包 來源:http://www.cnblogs.com/eshizhan/archive/2012/04/11/2441644.htm ...
  • dhcp伺服器是pxe自動化安裝的必要條件,因此先搞定dhcp伺服器,yum -y install dhcp, rpm -ql dhcp查看安裝了哪些包,less /etc/dhcp/dhcpd.conf 打開dhcp的主配置文件,如下圖: 沒有任何配置,但提示了去哪找主配置文件,cp /usr/s ...
  • (1)需要指定一下hwaddr(2)onboot=yes/etc/sysconfig/network-script/ ...
  • win10 ,本地連接無法識別網路 ,無線正常, 電腦診斷是:“此電腦上缺少一個或者多個網路協議” 1.手動設置ip 失敗 2.網卡卸載驅動 再安裝 失敗 3.網卡驅動更新 失敗 4.重置ie”高級設置 “ 附帶“刪除個性化” 附帶“ 退出電腦管家 ” 失敗 why... why... why.. ...
  • 很多項目使用的系統是centos或者redhat,最近有一個項目使用的系統竟然是阿裡雲unbantu,不知道他們負責人怎麼想的,明明有centos,非要用unbantu。抱怨到此,unbantu的學習是不可避免了,下麵開始記錄學習unbantu過程,持續更新。 1.首先學習如何安裝程式 可以看這個鏈 ...
  • sort命令 sort:文本排序,僅僅是對顯示文件的排序,而不影響源文件的順序,是根據ASSII碼 的字元升序來排列的。 -n:安裝數值大小從小到大排列 ,預設是升序。 -r:降序排列 ***** -t:指定欄位分隔符,表示按點號分隔域(類似awk -F,取欄位用$1,$2或cut的-d,取欄位f數 ...
  • uniq命令: 常見參數: -c,--count ***** 在每行旁邊顯示改行重覆出現的次數 -d,--repeated 僅顯示重覆出現的行,2次或2次以上的行,預設的去重包含1次。 例子: a.只對相鄰的相同行內容去重。 [root@nfs-server test]# cat test.txt ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...