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
- 这是一个怎样的过程?
- 依赖注入:
- 控制反转:
这里就相当于以下代码:
- 依赖注入:
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。
- Spring.net的理解与初使用
- spring.net的使用
- asp.net中对断点的理解与使用
- 05-Spring-aop技术理解与使用
- spring.net与MyBatis.NET的整合
- Spring.Net的基本使用
- Spring单例与多线程的理解
- Spring单例与多线程的理解
- spring IOC与AOP的理解
- Spring单例与多线程的理解
- 转载:理解Spring OC 与& AOP 的
- 对 spring 与 EJB 的理解
- Spring AOP的理解与配置示例
- spring事务的理解与测试
- Spring IOC与AOP的理解
- Spring中IOC与AOP的理解
- spring的scope理解与自定义scope
- Spring IOC 与 AOP的 理解
- Java一些正则的用法
- c++ switch内部的变量定义
- Spring MVC入门
- EasyDarwin开源流媒体服务器性能瓶颈分析及优化方案设计
- window版tomcat或zookeper出现闪退问题解决方案
- Spring.net的理解与初使用
- 小咖秀视频怎么下载? 小咖秀视频去logo保存到手机的方法
- 222. Count Complete Tree Nodes
- CCF CSP 2015年9月第4题 高速公路(求连通分量)
- STL简介
- Spring MVC快速体验
- RecyclerView的使用
- cmd编译运行java程序
- 代理模式の动态代理