1、前言:html
Spring.Net是Java開源框架遷移過來的,主要分爲web
1)依賴注入 spring
2)面向方面編程數據庫
3)數據訪問抽象編程
4)Asp.Net擴展windows
四個模塊功能,這裏只是簡單介紹依賴注入模塊功能。框架
對於Mybatis,在這裏也是簡單介紹相關配置和實現插入和查找功能。測試
2、項目結構:spa
DAL\BLL\Web項目在這裏不做介紹,由於本文章重點不在這裏。.net
這裏着重介紹下Spring.Net和MyBatis的東西。開始開發前,請先下載先關要引用的組件,具體下載和要引用什麼組件推薦上官網瞭解和下載,這裏再也不詳細贅述。
其餘文件說明:
一、Res文件夾下BLLObjects.xml等文件:Spring.net框架定義依賴注入的類定義和屬性。
二、Web根目錄下的Webconfig定義一些Spring.net的基礎配置和資源文件存放位置。
3、具體開發
一、Spring.Net模塊介紹
這裏以BLL層的Web層爲例做介紹,其餘層也是相似,讀者能夠觸類旁通。
關於Spring.Net框架的WebConfig配置以下:
1)註冊Spring.Net庫的dll:
1 <!--Spring.Net配置 引用Spring須要使用的類型--> 2 <configuration> 3 <configSections> 4 <sectionGroup name="spring"> 5 <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core" /> 6 <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" /> 7 </sectionGroup> 8 </configSections>
2)添加對aspx頁面注入支持:
在webconfig根節點的config節點下面的configuration的System.Web(若是沒有此節點請自行添加)節點下配置以下。這個配置也是必要的,做用是添加對aspx頁面注入的支持。
1 <httpHandlers> 2 <remove verb="*" path="*.asmx" /> 3 <add verb="*" path="*.aspx" type="Spring.Web.Support.PageHandlerFactory, Spring.Web" /> 4 </httpHandlers> 5 <httpModules> 6 <!--這裏不能漏,否則頁面注入的時候會出錯--> 7 <add name="Spring" type="Spring.Context.Support.WebSupportModule, Spring.Web"/> 8 9 </httpModules> 10 11
3)引入類型定義文件:
Webconfig xml根節點下配置引入定義對象的資源文件。引入資源文件分爲兩種方式,一種是做爲資源嵌入到程序集中,以下面註釋代碼所示,uri="assembly://MyBlog.BLL/MyBlog.BLL/Objects.xml"/>。用這種方式要在Visual Studio資源管理器中將Objects.xml文件的生成操做屬性改爲嵌入的資源,否則是沒把文件帶進去的。這裏推薦第二中方式,即本項目使用的方式,
直接使用相對路徑描述資源。如:<resource uri="~/Res/Objects/BLLObjects.xml"/>。符號"~"表明根目錄。
1 <spring> 2 <context> 3 <!--assembly://程序集名/命名空名/文件名(程序集內嵌資源)--> 4 <!--<resource uri="assembly://MyBlog.BLL/MyBlog.BLL/Objects.xml"/>--> 5 <resource uri="config://spring/objects" /> 6 <resource uri="~/Res/Objects/TestObjects.xml"/> 7 <!--數據庫鏈接對象--> 8 <resource uri="~/Res/Objects/DBConfig.xml"/> 9 <resource uri="~/Res/Objects/BLLObjects.xml"/> 10 <resource uri="~/Res/Objects/DALObjects.xml"/> 11 </context> 12 <!--必要--> 13 <objects xmlns="http://www.springframework.net"> 14 </objects> 15 </spring>
4)類型定義配置:
BLLObjects.xml文件裏面的內容以下所示。諸如此類的文件做用是定義類型,這個是Spring.Net注入的關鍵。這裏解釋一下下面配置文件的意思。
每個object節點,描述了C#代碼中的一個類,object節點的id是個身份標記,這個必須是惟一的;type屬性描述了具體的類,這個屬性由類的全名+逗號+類的命名空間構成。
例如type="MyBlog.BLL.ArtiCaManager,MyBlog.BLL"。這裏描述的是BLL層中的ArtiCaManager類。而object節點下面的property 屬性則是描述了這個類下面的屬性,這是本項目依賴注入的關鍵(本項目採用的注入方式只要是屬性注入和構造注入)。例如節點 :
<property name="ArtiCaDao" ref="ArtiCaDao"></property> 。
這個是ArtiCaManager類下面的屬性:
public IArtiCaDao ArtiCaDao { get; set; } //文章類別數據操做類。
這個屬性節點的做用是描述了IArtiCaDao接口實例化的類型是ArtiCaDao(ref="ArtiCaDao">)。而ref屬性裏面寫的是object節點的ID,做用也是描述了一個類型。
1 <?xml version="1.0" encoding="utf-8" ?> 2 3 <objects xmlns="http://www.springframework.net" 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5 xsi:schemaLocation="http://www.springframework.net 6 http://www.springframework.net/xsd/spring-objects.xsd"> 7 <!--類型的全名,而後是一個逗號,最後是類型所在的程序集名稱--> 8 <!--<object id="ArtiCaMana" type="MyBlog.BLL.ArtiCaManager, MyBlog.BLL" />--> 9 10 <object id="ArtiCaMana" type="MyBlog.BLL.ArtiCaManager,MyBlog.BLL"> 11 <property name="ArtiCaDao" ref="ArtiCaDao"></property> 12 </object> 13 14 <object id="LogMana" type="MyBlog.BLL.LogManager,MyBlog.BLL"> 15 <property name="iLogDao" ref="LogDao"></property> 16 </object> 17 18 <object id="DeptMana" type="MyBlog.BLL.DepartmentManager,MyBlog.BLL"> 19 <property name="iDepartmentDao" ref="DepartmentDao"></property> 20 </object> 21 22 </objects>
5)代碼實現:
BLL層ArtiCaManager類代碼
using System; using System.Collections.Generic; using System.Linq; using System.Text; using MyBlog.Model; using MyBlog.IDAL; using Spring.Context; using Spring.Context.Support; using MyBlog.IBLL; namespace MyBlog.BLL { /// <summary> /// 文章類別管理業務邏輯類 /// </summary> public class ArtiCaManager : IArtiCaManager { public IArtiCaDao ArtiCaDao { get; set; } //文章類別數據操做類 /// <summary> /// 插入文章類別 /// </summary> /// <param name="arCa">文章類別實體類</param> /// <returns>是否插入成功</returns> public bool InsertCa(ArticleCategory arCa) { arCa.CategoryName = arCa.CategoryName+ "[這裏是調用了文章類別管理類BLL接口插入的]"; //僅供測試留個記號 return ArtiCaDao.InsertCa(arCa); } /// <summary> /// 取出全部文章類別 /// </summary> /// <returns>文章類別列表</returns> public IList<ArticleCategory> SelectAllCa() { return ArtiCaDao.SelectAllCa(); } } }
4、結論
Spiring.Net的依賴注入,主要是利用了.Net反射的特性,在xml中定義了.Net中某個對象的類型,而後框架自動實例化,好處在於提升軟件的靈活性,特別是對於一個接口有多個實現的場景。
一個小問題整了兩天,哎,仍是太嫩了,還要繼續努力呀
原文連接:https://www.cnblogs.com/still-windows7/archive/2013/04/09/2826743.html