Spring.Net简单用法

  Spring.Net其实就是抽象工厂,只不过更加灵活强大,性能上并没有明显的区别。

  它帮我们实现了控制反转。

  其有两种依赖注入方式。

    第一:属性注入

    第二:构造函数注入

  首先,我们去  Spring.net下载 您要的版本。

  现在,我们创建一个控制台应用程序,并命名为 Spring.Net_Demo

  其次,我们在引入Spring.NET=>bin=>net=>4.0=>release文件夹下的Common.Logging.dll和Spring.Core.dll两个程序集。

  我们先来说最普通的通过其实现工厂中的实例。

  1:并在当前程序下,创建一个命名 IUserDAL 接口 ,并约束一个命名为 Show 的方法

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace Spring.Net_Demo
 8 {
 9     public interface IUserDAL
10     {
11
12         void Show();
13     }
14 }

  2:其次,我们在创建一命名 UserDAL 类,并实现接口 IUserDAL 中的Show 的方法

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace Spring.Net_Demo
 8 {
 9     public class UserDAL : IUserDAL
10     {
11
12         public void Show()
13         {
14             Console.WriteLine("我是UserDAL");
15         }
16     }
17 }

  3:接下来,重点就是配置,现在我们配置好App.config

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <configuration>
 3     <!--Spring.Net中注释,不然报错-->
 4
 5     <!-- <startup>
 6         <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
 7     </startup> -->
 8
 9   <!--Spring.Net块配置-->
10      <configSections>
11         <sectionGroup name="spring">
12             <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
13             <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
14         </sectionGroup>
15     </configSections>
16
17  <spring>
18
19         <context>
20             <resource uri="config://spring/objects"/>
21         </context>
22
23         <objects  >
24
25           <!--这里的name属性,一般是对应类名,等下获取得时候对应,type中 Spring.Net_Demo.UserDAL 是 UserDAL 的类全名称,Spring.Net_Demo其程序集-->
26    <object name="UserDAL" type="Spring.Net_Demo.UserDAL,Spring.Net_Demo">
27
28   </object>
29
30
31         </objects>
32     </spring>
33
34 </configuration>

    4:然后我们在Program.cs中调用一下

    //这里是初始化   IApplicationContext context = ContextRegistry.GetContext();   创建UserDAL实例
     IUserDAL userDAL = context.GetObject("UserDAL") as IUserDAL;  //调用其方法
     userDAL.Show();
     Console.WriteLine("我是Spring.Net注入方法!");

       4:现在我们可以看到结果

  

-----------------------------------------------------------属性依赖注入(简单值)--------------------------------------------------------------------

  现在,我们来看看通过其属性依赖输入。

  首先,我们修改下UserDAL类,添加一个属性,并在Show方法中输出。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace Spring.Net_Demo
 8 {
 9     public class UserDAL : IUserDAL
10     {
11         public string Name { get; set; }
12         public void Show()
13         {
14             Console.WriteLine("我是UserDAL"+Name);
15         }
16     }
17 }

  其次,我们修改下App.config配置文件在object节点下,添加一个 <property name="Name" value="我是属性Name哦"></property>

  具体过程请仔细看代码。

<?xml version="1.0" encoding="utf-8" ?>
  <configuration>
     <!--Spring.Net中注释,不然报错-->

     <!-- <startup>
          <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
      </startup> -->

    <!--Spring.Net块配置-->
      <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  >

           <!--这里的name属性,一般是对应类名,等下获取得时候对应,type中 Spring.Net_Demo.UserDAL 是 UserDAL 的类全名称,Spring.Net_Demo其程序集-->
    <object name="UserDAL" type="Spring.Net_Demo.UserDAL,Spring.Net_Demo">
           <!--这里通过给Name或ID属性,名字必须一致,我们简单给个值为“我是属性Name哦”-->
                  <property name="Name" value="我是属性Name哦"></property>

  </object>  

         </objects>
     </spring>

 </configuration>            

  最后,在Program.cs调用不变,直接运行,结果如下:

  我们可以看到,其在App.config中就是给属性赋值操作了。

-----------------------------------------------------------属性依赖注入(复杂值)--------------------------------------------------------------------

  其属性注入,还可以注入更复杂的值。

  例如,我们在添加一个命名为:UserServer 的类。并添加一个UserDAL的属性,并添加方法Show中输出UserDAL中Name

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace Spring.Net_Demo
 8 {
 9    public class UserServer
10     {
11         public UserDAL userDAL { set; get; }
12         public  void Show()
13         {
14             Console.WriteLine("我是UserServer"+userDAL.Name);
15         }
16     }
17 }

  现在,我们该改造下App.config。详情请看代码。

<?xml version="1.0" encoding="utf-8" ?>
  <configuration>
     <!--Spring.Net中注释,不然报错-->

     <!-- <startup>
          <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
      </startup> -->

    <!--Spring.Net块配置-->
      <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  >

           <!--这里的name属性,一般是对应类名,等下获取得时候对应,type中 Spring.Net_Demo.UserDAL 是 UserDAL 的类全名称,Spring.Net_Demo其程序集-->
    <object name="UserDAL" type="Spring.Net_Demo.UserDAL,Spring.Net_Demo">
           <!--这里通过给Name或ID属性,名字必须一致,我们简单给个值为“我是属性Name哦”-->
                  <property name="Name" value="我是属性Name哦"></property>

  </object>  

        <!--这里我们在添加一个节点,属性注入复杂属性 -->
           <object name="UserServer" type="Spring.Net_Demo.UserServer,Spring.Net_Demo">
    <!--这里属性直接指向UserDAL节点,Name属性必须对应 -->
                 <property name="UserDAL" ref="UserDAL"></property>
            </object>

         </objects>
     </spring>

 </configuration>         

   现在,我们还需修改下Program.cs代码,因为我们现在是注入UserServer

1  IApplicationContext context = ContextRegistry.GetContext();
2             //IUserDAL userDAL = context.GetObject("UserDAL") as IUserDAL;
3         //现在是注入UserServer
4             UserServer userDAL = context.GetObject("UserServer") as UserServer;
5             userDAL.Show();
6             Console.WriteLine("我是Spring.Net注入方法!");        

我们可以看到,结果跟上面简单属性注入是一样。

-----------------------------------------------------------构造函数依赖注入--------------------------------------------------------------------

  构造函数注入,其实也差不多。首先,我们修改下UserDAL代码。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace Spring.Net_Demo
 8 {
 9     public class UserDAL : IUserDAL
10     {
11         public string Name { get; set; }
12
13         //这里添加一个构造函数
14         public UserDAL(string name)
15         {
16             Name = name;
17         }
18
19         public void Show()
20         {
21             Console.WriteLine("我是UserDAL"+Name);
22         }
23     }
24 }

接下来,我们依然是要修改下App.config配置文件。

<?xml version="1.0" encoding="utf-8" ?>
  <configuration>
     <!--Spring.Net中注释,不然报错-->

     <!-- <startup>
          <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
      </startup> -->

    <!--Spring.Net块配置-->
      <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  >
           <!--我们注释掉这一部分-->
           <!--这里的name属性,一般是对应类名,等下获取得时候对应,type中 Spring.Net_Demo.UserDAL 是 UserDAL 的类全名称,Spring.Net_Demo其程序集
    <object name="UserDAL" type="Spring.Net_Demo.UserDAL,Spring.Net_Demo">
          这里通过给Name或ID属性,名字必须一致,我们简单给个值为“我是属性Name哦
                  <property name="Name" value="我是属性Name哦"></property>

  </object>  -->

<!--这里为构造函数注入,两个选择一个就可,不在细说,有注释-->
 <object>
      <!--构造函数注入 Name不区分大小,对应构造参数名 -->
    <constructor-arg name="name" value="构造函数注入"></constructor-arg>

    <!-- 构造函数注入,需声明构造, 可直接用index=0 -->
   <!-- <constructor-arg index="0" value="构造函数注入"></constructor-arg> -->
  </object> 

        <!--这里我们在添加一个节点,属性注入复杂属性 -->
            <object name="UserServer" type="Spring.Net_Demo.UserServer,Spring.Net_Demo">
    <!--这里属性直接指向UserDAL节点,Name属性必须对应 -->
                 <property name="UserDAL" ref="UserDAL"></property>
            </object>

         </objects>
     </spring>

 </configuration>       

接下,调用代码无需改变,我们看下结果。

-----------------------------------------------------------外部引入XML文件--------------------------------------------------------------------

    如果越来越多类,我们要注入,在配置文件里不会越来越多注入声明吗?

    我们可以独立把这些独立放在一个XML文件里,然后在配置文件里声明块就可以了。

    首先,我们新建一个Server.xml,在里面放入<objects>节点的所有代码。

    当然,您可以新建多个,比如在三层中,一个是DAL层,一个是BLL层等等,这里就不怎么一一展示了。

    (这里需注意下,因为我的是控制台应用程序,需右键这个XML文件,修改其属性《生成操作=> 嵌入的资源》)。

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <objects>
 3   
 4   <object name="UserDAL" type="Spring.Net_Demo.UserDAL,Spring.Net_Demo">
 5
 6
 7     <!--构造函数注入 可直接用index=0-->
 8     <constructor-arg index="0" value="外部引入哦"></constructor-arg>
 9   </object>
10
11 </objects>

     然后修改下App.comfig ,详情请看代码

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <!--Spring.Net中注释,不然报错-->

    <!-- <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
    </startup> -->

  <!--Spring.Net块配置-->
     <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"/>

            <!-- 外部XML文件引入,在控制台中,同时需把文件属性中的生成操作改成‘嵌入资源‘-->
           <resource uri="assembly://Spring.Net_Demo/Spring.Net_Demo/Server.xml"/>
        </context>
    </spring>

</configuration>

    调用的话,不需要任何改变。

本文结束。

    以上两种注入方法,虽然有点啰嗦,勿介意哈,老鸟飘过哈。

    

   

时间: 2024-10-18 05:39:49

Spring.Net简单用法的相关文章

iOS block-base 动画简单用法+关键帧动画设置线性变化速度的问题

本文转载至 http://www.tuicool.com/articles/aANBF3m 时间 2014-12-07 20:13:37  segmentfault-博客原文  http://segmentfault.com/blog/alan/1190000002411296 iOS的各种动画相漂亮,相信这是吸引很多人买iPhone的原因之一.不仅如此,这还是吸引我做iOS开发的一大原因,因为在iOS上给界面实现一些像样的动画实在是太轻松了! 这里就介绍一下iOS的block-based an

Android WIFI 简单用法

随着Wifi的普及,在开发App的时候对wifi的考虑越来越多了.例如程序的升级在wifi下可以省很多流量,在通信软件中的视频通话.可以实现高画质的传输等等,Android提供了WifiManager类来帮助开发者们管理Wifi.下面就简单来说一下WifiManager的简单用法把. 权限: 为了使用WfiManager 我们需要在Androidmanifest.xml 加入权限: //本例中使用了前两个.具体请按照需要添加权限. <uses-permission android:name=&quo

Android中资源文件中的字符串数组string-array简单用法

在Android中,用string-array是一种简单的提取XML资源文件数据的方法. 例子如下: 把相应的数据放到values文件夹的strings.xml文件里,或是其他自定义的xml中都可以,以下操作方法相同. <?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="sports"> <item>足球<

expect简单用法

1 #!/usr/expect/bin/expect -f 2 3 4 set loginuser [lrange $argv 0 0] 5 set loginpass [lrange $argv 1 1] 6 set ipaddr [lrange $argv 2 2] 7 set port [lrange $argv 3 3] 8 set timeout [lrange $argv 4 4] 9 set from [lrange $argv 5 5] 10 set to [lrange $ar

Tcpdump 的简单用法

Tcpdump 的简单用法 tcpdump是Linux命令行下使用最广泛的网络分析工具,运行的时候会将网卡运行在混杂模式下,需要root权限才能执行 下面是几个比较常见的参数: -w  保持到指定的文件 -i  指定监听的网卡,缺省显示第一块网卡 -nn 以IP方式显示host -v  显示详细信息 -s  指定数据包大小,缺省是65535 -t  不显示时间 ,缺省是显示时间戳 -c  获取数据包数量,缺省不限制,需要用Ctrl+c来终止 下面是关于命令关键字的说明 1.主要包括host,ne

C++ double转string类型以及MFC控件简单用法

这两天项目需要,测试c++库里面内容.生成jar再给Android调用.我没有学过C++,现在开始记录C++简单用法.测试时候一般都是使用mfc程序来测试,要输入值,显示结果吗.我用的编译环境vs2008. 一.double 转string #include <string> CString strResultx; strResultx.Format(_T("x:%.4f\n"), 89.7887878); 转换结果还是放在strResultx 2.两个字符串相连 CStr

vB SendMessage API 简单用法

vB SendMessage API 简单用法 1. 在Windows编程中,向文本框控件.列表控件.按钮控件等是我们最常接触的控件了.但是在VB中这些控件有时无法实现我们的需要.在这时,我们只要简单的利用Windows API函数就可以扩充这些控件的功能了.顾名思义,SendMessage函数就是向窗口(这里的窗口指的是向按钮.列表框.编辑框等具有hWnd属性的控件)发送消息的函数,该函数的定义如下:Declare Function SendMessage Lib "user32"

java中Object.equals()简单用法

/* equals()方法默认的比较两个对象的引用! */ class Child { int num; public Child(int x){ num = x; } //人文的抛出运行时异常的好处是:可以自定义错误信息! /*public boolean equals(Object o) throws ClassCastException{ if(!(o instanceof Child)) throw new ClassCastException("中文提示:类型错误"); Ch

spring aop简单日志实例

转载自:http://www.blogjava.net/laoding/articles/242611.html 一直就用spring的IOC,遗憾spring的另一重要组成部分AOP却没用过,所以近几天抽空研究了下AOP,学了些东西,在这里记录下spring2.0的aop配置,以一个简单的记录日志的实例来说明,先介绍下用XMLSchema来配置,下一篇介绍annotation配置,废话不多说,开始吧先新建个web工程,将spring的包加进去,为方便就把全部的jar包加进去. 先来看个接口,很