Spring.net的理解与初使用

来源:互联网 发布:ipad如何升级淘宝店铺 编辑:程序博客网 时间:2024/06/01 07:11

  • 前言
  • SpringNet概念
  • 在控制台程序中使用SpringNet
    • 创建应用和类
    • 添加spring程序集引用
    • 配置SpringNet文件
    • Program里面代码
    • SpringNet运行示例
  • 深入了解SpringNet
  • 总结

前言

在.net中,创建对象最常用的方法是new类的实例。这样做有违“层与层之间松耦合”的原则。Spring应用了IOC、DI的概念,提供了一种新的创建对象的方式。
接下来在控制台应用程序里面简单使用spring.net控制反转、依赖注入的方式来创建对象,根据代码来一步步理解Spring.net在我们应用程序中做了什么。
如果介绍错误,请不吝赐教,万分感谢。

Spring.Net概念

  • 我们先来讲IOC、DI
    IoC:控制反转
    原来创建对象的权利由程序来控制就是new实例,IoC就是改由容器来创建,相当于一个工厂,
    DI:依赖注入
    没有IoC就没有DI,DI:容器在创建对象时,通过读取配置文件(一般是xml)设置的默认值,使其在创建时就拥有了某些注入的值。
  • 什么是Spring.net?
    spring是一个依赖注入的设计框架,使项目层与层之间解耦达到更灵活的使用。Spring.net是Spring中支持.net开发的框架。
    Spring.net是一个企业级的重型依赖注入框架应用框架。Spring.Net会让应用性能下降,不过它的灵活的优点远大于缺点。适合用来做企业的oa系统之类的。
  • Spring.net能够干什么?
    在core(核心)和AOP(模型支持,属性反转,接受注入)之上支持:
    1, MSQ(消息队列)
    2, MVC
    3, WEB
    4, Quartz.net
    Spring.net能做到的不止如此。

在控制台程序中使用Spring.Net

创建应用和类

这里写图片描述
UserInfoDal就是所要用到的类,类内容如下:

using System;namespace SpringNetDemo{   public class UserInfoDal    {        public string Name { get; set; }        public string Name2 { get; set; }        public UserInfoDal(string name,string name2)        {            Name = name;            Name2 = name2;        }        public void Show()        {            Console.WriteLine(Name+"====="+ Name2);        }    }}

添加spring程序集引用

Spring.net核心程序集是Common.Logging.dll和Spring.Core.dll,当然如果是在MVC中使用的话需要相应版本的Spring.Web.Mvc.dll。
对于程序集的引用下官网的示例工程获得,我们也可以通过NuGet直接安装到我们的应用里面。
这里使用的是MVC4就安装相应的程序集。输入以下指令
这里写图片描述
packages包里面多了下面5个文件夹
这里写图片描述
这些就是Spring.net的所有相关的程序集了。我们在里面添加自己所需的引用,前三个是必须要用到的,后面两个如果是做网站的话可以引用。

配置Spring.Net文件

在应用的配置文件中添加spring的所需的节点:
这里写图片描述
在下面的spring节点中进行配置:
这里写图片描述
context节点是用来指定objects节点的位置的,有config(当前配置文件内)、file(文件)、assembly(程序集)。config是在当前配置文件内直接object配置节点信息。但是往往objects节点配置信息很大并且不同层的配置不同,所以可以把objects节点配置信息写在单独的文件内,用file、assembly来指向你的配置文件。
这里是直接在应用配置文件内配置:
这里写图片描述
接下来配置objects的节点信息。objects可以包含多个object子节点,每一个object都是一次注入和实例化的操作。

    <objects xmlns="http://www.springframework.net">      <!--type指向的是你想要实例化的类,是你前面是类的全名称,后面是所在程序集          name是你所要创建实例的名字。-->      <object name="UserInfoDalInstance" type="SpringNetDemo.UserInfoDal,SpringNetDemo">        <!--构造函数注入-->        <constructor-arg index="0" value="参数Name" />        <constructor-arg index="1" value="参数Name2" />        <!--属性注入-->        <property name="Name" value="我是名字" />      </object>      <!--<object name="UserInfoBll" type="SpringNetDemo.UserInfoBll,SpringNetDemo">        --><!--复杂属性注入--><!--        <property name="UserInfoDal" ref="UserInfoDal" />      </object>-->    </objects>

Program里面代码:

using Spring.Context;using Spring.Context.Support;using System;namespace SpringNetDemo{    class Program    {        static void Main(string[] args)        {            #region 原来创建实例的方式            //UserInfoDal UserInfoDalInstance = new UserInfoDal("Name1","Name2");            #endregion            #region 使用Spring.net提供的方法            //这句代码让spring.net读取配置文件,自动完成注入和反转操作,创建实例UserInfoDalInstance            IApplicationContext ctx = ContextRegistry.GetContext();            //我们到所创建的上下文里面拿到我们刚才创建的实例UserInfoDalInstance            UserInfoDal dal = ctx.GetObject("UserInfoDalInstance") as UserInfoDal;            dal.Show();            Console.ReadLine();            #endregion        }    }}

Spring.Net运行示例

这里写图片描述
程序中并没有new实例对象,但是已经通过配置文件,正确的实例化了,并且正确的传入了参数。Name2的值为”参数Name2”说明构造函数注入成功,Name值为“我是名字”说明属性注入成功。

深入了解Spring.Net

  1. 这是一个怎样的过程?
    • 依赖注入:
      这里写图片描述
    • 控制反转:
      这里写图片描述
      这里就相当于以下代码:
   UserInfoDal UserInfoDalInstance = new UserInfoDal("参数Name", "参数Name2");   UserInfoDalInstance.Name = "我是名字";

这里name值是可选的,因为某些场合只需要注入就好了而不需要创建实例,比如MVC的Controller。
2. 是何时创建实例UserInfoDalInstance ?
程序中明明没有UserInfoDalInstance,那么为什么能够使用呢?不,我们程序中已经有了UserInfoDalInstance,Spring.net已经帮我们保存了配置文件中所有的实例。
程序中有这段代码:

IApplicationContext ctx = ContextRegistry.GetContext();UserInfoDal dal = ctx.GetObject("UserInfoDalInstance") as UserInfoDal;
  • 打开它的元数据信息,看看GetContext()方法做了什么。

这里写图片描述
看下谷歌对备注的翻译:
这里写图片描述
我们可以知道,这句话读取了配置文件并做了基本工作。

  • 看下GetObject是从哪里得到实例UserInfoDalInstance的
    这里写图片描述
    摘要指出UserInfoDalInstance是根据在配置文件的object name生成的。这和上面推断的不错。

总结:

步骤:
1. 添加引用
2. 配置节点
3. 使用spring.net帮我们创建好的实例。
注意:
当读取配置文件时,就已经创建好了实例UserInfoDalInstance。

原创粉丝点击