Spring.net的理解与初使用

前言
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

这是一个怎样的过程?
    依赖注入:
    ![在这里插入图片描述](https://img-blog.csdn.net/20171008160705997?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzQ3MjA3NTk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
    控制反转:
   ![在这里插入图片描述](https://img-blog.csdn.net/20171008160817751?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzQ3MjA3NTk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
    这里就相当于以下代码:

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。

作者:等待临界
来源:CSDN
原文:https://blog.csdn.net/qq_34720759/article/details/78171134
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值