<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Spring.Net框架介紹及基本配置(學習筆記一)

        Spring.NET是一個應用程序框架,其目的是協助開發人員創建企業級的.NET應用程序。它提供了很多方面的功能,比如依賴注入、面向方面編程(AOP)、數據訪問抽象及ASP.NET擴展等等。Spring.NET以Java版的Spring框架為基礎,將Spring.Java的核心概念與思想移植到了.NET平臺上。  

        Spring作為實現IOC或者說是DI的一種框架,為我們更好的降低程序的耦合性提供了一種方便的處理方式。當然也有其他一些實現IOC的框架如微軟的Unity。至于何謂IOC、DI我這里也就不介紹了。有興趣可以參考http://student.csdn.net/space.php?uid=706796&do=blog&id=39000

        首先聲明,我寫這個系列并不是因為自己很精通。只是自己的一個學習過程。如果有什么不對的地方,往專家踴躍拍磚!

        本節要點:

        1、Spring整體框架介紹

        2、Spring基本配置

        3、Spring注入方式

        4、配置的使用

        首先:我使用的Spring的版本為:Spring1.3。開發工具為:VS2008

        學習Spring,首先得學會如何配置它。可以從官網下載最新的安裝包www.springframework.net.

        1、Spring的整體框架以及說明

        

        

        Spring.Core作為整個框架的基礎,實現了依賴注入的功能。Spring.NET的大部分模塊都要依賴或擴展該模塊。Spring.Core的基礎是IObjectFactory接口,該接口用一個簡單而優雅的方式實現了工廠模式,使我們可以無需自行編寫singleton類型和眾多的服務定位器,并允許將對象配置及其依賴關系與具體的程序邏輯解耦。該模塊中的IApplicationContext接口是IObjectFactory的擴展,增加了諸多企業級功能,包括使用資源文件進行文本本地化、事件傳播和資源裝載等等。

        Spring.AOP為業務對象提供面向方面編程(AOP)的支持。AOP完善了IoC容器的功能,為創建企業應用和使用聲明式服務奠定了堅實的基礎。

        Spring.Web對ASP.NET進行了一系列功能擴展,包括對ASP.NET頁面進行依賴注入、雙向數據綁定、在ASP.NET 1.1中使用Master page、以及增強的本地化功能支持等。

        Spring.Services允許將任意的“普通”對象(意為沒有繼承任何指定基類型的對象)發布為企業服務(COM+)或遠程對象。通過依賴注入和特性元數據覆蓋等功能,該模塊可使.NET的Web服務獲得極大的靈活性。同時也支持Windows后臺服務。

      Spring.Data定義了一個抽象的數據訪問層,可以跨越各種數據訪問技術(從ADO.NET到各種ORM)進行數據訪問。該模塊包含一個ADO.NET的抽象層,減少了使用傳統ADO.NET進行編碼和事務管理時的工作量。

      Spring.ORM為時下流行的ORM類庫提供了一個整合層,其中包含聲明式事務管理等諸多功能。

        2、Spring基本配置:

        Spring的配置比起NHibernate算是比較簡單了(個人意見)。同NHibernate一樣,它的配置文件也是用XML完成的。如果你想在手工書寫Spring配置文件時,有同NHibernate配置的智能感應一樣,那你需要將Spring安裝目錄下(Spring.NET 1.3.0\doc\schema)的XML結構文件拷貝到VS的安裝目錄的架構文件中如:C:\Program Files\Microsoft Visual Studio 9.0\Xml\Schemas。

        Spring的配置中有幾個是必須的,并且在不同的應用中都一樣。如:

       

      代碼
      1 <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
      2  <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core"/>
      3
      4  <spring>
      5    <context>
      6   <resource uri="config://spring/objects"/>
      7 </context>
      8    <objects xmlns="http://www.springframework.net" xmlns:aop="http://www.springframework.net/aop"></objects>
      9  </spring>

              其中,name屬性以及其類型都是固定配置,不可更改。context節點、objects也一樣。

        其他的便是根據具體應用所進行的配置。

      3、注入方式:

        1、屬性注入

          <property name="baz" ref="baz" ></property>
                   <property name="bar" ref="bar"></property>

        2、構造注入

                   <constructor-arg name="_bar"  ref="bar"></constructor-arg>
                  <constructor-arg name="_baz"  ref="baz"></constructor-arg>

      以上兩種配置根據類的有無屬性、構造函數進行。不過在其他資料中,別人說屬性注入的方式比較常用。

      全部配置文件如下:

        3、方法注入。

        通過其他類的方法來構造對象。配置如下:

       

      代碼
      1 <object id="objFactory" type="ConsoleAppSpring.InjectionFactory,ConsoleAppSpring">
      2 <lookup-method name="GetObject"object="target"/>
      3 </object>
      4
      5 <object id="target" type ="ConsoleAppSpring.MethodInjection,ConsoleAppSpring" singleton="1">
      6 <property name="Name" value="TestName"></property>
      7 <property name="Age" value="38"></property>
      8 </object>

      注意:通過屬性注入時:類必須有無參數構造函數,否則會發生如下異常。通過構造注入時:可以無無參數構造函數,但是,構造屬性

      constructor-arg 的name屬性值應為對應構造函數的參數

       

            以上注入方式配置文件如下:

      代碼
      1 <?xml version="1.0" encoding="utf-8"?>
      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>
      9
      10
      11 <spring>
      12 <context>
      13 <resource uri="config://spring/objects"/>
      14 </context>
      15
      16 <objects xmlns="http://www.springframework.net" xmlns:aop="http://www.springframework.net/aop">
      17 <object id="foo" type="ConsoleAppSpring.Foo,ConsoleAppSpring">
      18 <property name="baz"ref="baz"></property>
      19 <property name="bar"ref="bar"></property>
      20 <!--<constructor-arg name="_bar"ref="bar"></constructor-arg>
      21 <constructor-arg name="_baz"ref="baz"></constructor-arg>-->
      22 </object>
      23
      24 <object id="bar" type="ConsoleAppSpring.Bar,ConsoleAppSpring">
      25 <property name="Heigth" value="27"></property>
      26 </object>
      27 <object id="baz" type="ConsoleAppSpring.Baz,ConsoleAppSpring">
      28 <property name ="Name">
      29 <value>tyb</value>
      30 </property>
      31 </object>
      32
      33 <object id="objFactory" type="ConsoleAppSpring.InjectionFactory,ConsoleAppSpring">
      34 <lookup-method name="GetObject"object="target"/>
      35 </object>
      36
      37 <object id="target" type ="ConsoleAppSpring.MethodInjection,ConsoleAppSpring" singleton="1">
      38 <property name="Name" value="TestName"></property>
      39 <property name="Age" value="38"></property>
      40 </object>
      41
      42
      43 </objects>
      44 </spring>
      45  </configuration>

         在Objects節點的子節點Object中,ID代表類的標識,type代表類的具體類型。具體Foo、Bar、Baz三個類的代碼一起給出:

       

      代碼
      namespace ConsoleAppSpring
      {
      publicclass Foo
      {
      public Bar bar { get; set; }
      public Baz baz { get; set; }

      public Foo()
      { }

      public Foo(Bar _bar, Baz _baz)
      {
      bar
      = _bar;
      baz
      = _baz;


      }
      }
      }

      namespace ConsoleAppSpring
      {
      publicclass Bar
      {
      publicstring Heigth { get; set; }
      }
      }

      namespace ConsoleAppSpring
      {
      publicclass Baz
      {
      //public List<string> Name { get; set; }
      publicstring Name { get; set; }
      }
      }

      namespace ConsoleAppSpring
      {
      publicclass MethodInjection
      {
      publicstring Name { get; set; }
      publicint Age { get; set; }

      public MethodInjection()
      {

      }
      public MethodInjection(string name, int age)
      {
      Name
      = name;
      Age
      = age;
      }
      }
      }

      namespace ConsoleAppSpring
      {
      publicclass InjectionFactory
      {
      publicstring name ="method injection";
      publicint age =32;

      publicvirtualobject GetObject()
      {
      returnnew MethodInjection(name, age);
      }
      }
      }

       4、使用以上Spring的配置

        

      代碼
      1 staticvoid Main(string[] args)
      2 {
      3 IApplicationContext context = ContextRegistry.GetContext();
      4 Foo foo = (Foo)context.GetObject("foo");
      5 Console.WriteLine(foo.bar.Heigth);
      6 Console.WriteLine(foo.baz.Name);
      7
      8 InjectionFactory factory = (InjectionFactory)context.GetObject("objFactory");
      9 Console.WriteLine("factory name is"+ factory.name +"factory age is "+ factory.age);
      10 MethodInjection injection = (MethodInjection)factory.GetObject();
      11 Console.WriteLine("methodinjection name is {0}, age is {1}:" , injection.Name, injection.Age);
      12 Console.ReadLine();
      13
      14 }

        

      輸出如下:

       

      由上圖可以看出MethodInjection的屬性還是配置文件給出的值,不會因為InjectionFactory而改變

      說明:IApplicationContext 、ContextRegistry需要引入 Spring.Context、 Spring.Context.Support命名空間。安裝完Spring后,在安裝的目錄中能找到相應的程序集。IObjectFactory接口提供了配置框架和基本功能,IApplicationContext接口又在其基礎上擴展了許多企業級特性。可以說IApplicationContext是IObjectFactory的一個超集,具備IObjectFactory所有的功能與行為。ContextRegistry類既可用來初始化應用程序上下文,也可用來以服務定位器風格對容器中的對象進行訪問

      參考:Spring.Net框架參考文檔
           http://www.rzrgm.cn/goodHelper

      附:源碼下載

      posted @ 2010-11-23 16:25  tyb1222  閱讀(1612)  評論(3)    收藏  舉報
      主站蜘蛛池模板: 97久久精品人人做人人爽| 邵东县| 亚洲av专区一区| 国产精品一区二区小视频| 日日躁狠狠躁狠狠爱| 77777亚洲午夜久久多人| 亚洲啪啪精品一区二区的| 国产精品国三级国产专区| 综合欧美视频一区二区三区| 亚洲精品日韩中文字幕| 亚洲精品成人一二三专区| 97精品亚成在人线免视频 | 久久精品国产福利一区二区| 久久亚洲美女精品国产精品| 天天做天天爱夜夜爽导航| 亚洲欧美人成人让影院| 久9re热视频这里只有精品免费| 伊人中文在线最新版天堂| 加勒比无码人妻东京热| 欧美xxxx做受欧美.88| 一本加勒比hezyo无码人妻| 九九电影网午夜理论片| 武穴市| mm1313亚洲国产精品| 天天做日日做天天添天天欢公交车| 少妇放荡的呻吟干柴烈火动漫| 老子午夜精品888无码不卡| 啊轻点灬大JI巴太粗太长了在线| 精品无码人妻| 国产精品无码免费播放| 粉嫩蜜臀av一区二区三区| 最近中文国语字幕在线播放| 开心色怡人综合网站| 日本乱码在线看亚洲乱码| 爱啪啪av导航| 野花韩国高清电影| 亚洲高清成人av在线| 永久无码天堂网小说区| 国产精品人成视频免费播放| 熟女熟妇乱女乱妇综合网| 亚洲国产成人无码av在线影院|