程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Spring.net(二)----初探IOC容器

Spring.net(二)----初探IOC容器

編輯:關於JAVA

我在上一篇關於Spring.net的文章“Spring.NET框架簡介及模塊說明 ”中很詳細的介紹了,本文就不舊話從提。我門就直奔主題吧。

1.首先了解兩個接口.

IObjectFactory接口和IApplicationContext接口:他兩個稱為“容器”或“IOC容器”。

Spring.net框架的核心原則是非侵入性。

IObjectFactory接口是初始化、配置及管理對象的實際容器。

IObjectFactory全限定名為Spring.Objects.Factory.IObjectFactory,IObjectFactory接口有多個實現,其中最

常用的是Spring.Objects.Factory.XML.XmlObjectFactory。

2.對象定義的XML文件

在app.config或是web.config中加入

<spring>
   <context type="Spring.Context.Support.XmlAppliationContext",Spring.Core"/>
   <resource uri=file://objects.xml//>
  </spring>

注意:context的type屬性是可以省略的。

3.spring和context的順序是有限制的,在Spring.net框架裡已經將“spring/context”作為字符串常量定義在了AbstractApplicationContext類中以來表示上下文的接點名稱。可通過:

IApplicationContext context=ContextRegistry.GetContext();來獲取接點值,這裡要注意一點。在使用他的時候必須要使配置文件中的<spring>接點起作用,這樣就得必須在.NET的配置文件<configSections>節點下注冊類Spring.Context.Support.ContextHandler,它讓ContextRegistry類可用來初始化應用程序上下文,它實現在FCL的IConfigurationSectionHandler接口

3.XML對象定義可在<objects>節點注冊

<section name="objects" type="Spring.Context.Support.DefultSectionHandler,Spring.Core">

4.Spring.net的IOC容器的簡單實例----用簡單三層來實現

光說這麼多沒用,我門還是來點實際的,看看下面的這個簡單實例:

一.先建立項目隨後添加引用Spring.Core程序集。

二.引用System.Configuration----需要用到ConfigurationManager類的方法。

三.配置.NET配置文件----具體配置如下:

<?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>
     <!--這的配置根據實際的程序來的,UsersCompontents是程序集Spring.Demo.Compontext下的一個類-->
     <object name="Users"
         type="Spring.Demo.Compontext.UsersCompontents,Spring.Demo.Compontent">
     </object>
    </objects>
   </spring>
  </configuration>

四.建立好項目的實體類和接口以及實現借口。

下面是實例程序的結構圖:Model(實體層),Service(接口),Compontent(實現接口的業務邏輯),SimpleTest(測試)

五.首先看看實體層的定義,我相信代碼大家都看得懂就不多說了,直接貼上來。

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; }
     }
   }
  }

六.在看接口的定義

using System;
   using System.Collections.Generic;
   using System.Text;
   namespace Spring.Demo.Service
   {
     public interface IUsers
     {
      /// <summary>
      /// 返回用戶的詳細信息的方法
      /// </summary>
      /// <returns></returns>
      string GetUserInfo();
    }
   }
七.實現接口方法的邏輯

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
    }
   }

八.通過Spring.net的IOC容器IApplicationContext從config文件中取得程序集信息和調用方法實現控制反轉

//從config文件中取得程序集信息
   IApplicationContext context = ConfigurationManager.GetSection("spring/context")
                   as IApplicationContext;
   //調用方法
   //Users為config文件裡的配置節
   //<object name="Users"
   //    type="Spring.Demo.Compontext.UsersCompontents,Spring.Demo.Compontent">
   //</object>
   IUsers user = context.GetObject("Users") as IUsers;
   Console.WriteLine(user.GetUserInfo());
   Console.Read();

運行結果如下:

關於Spring.net的IOC容器就簡單介紹在這裡了,我也是剛學Spring.net,文章裡難免會出現錯誤,目前

Spring.net的人氣太低了,希望對這有興趣的朋友多多探討,更希望這方面的高手能多指教。如文章中發現

錯誤希望大家留言提出,我門大家一起學習,改進。

本文配套源碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved