spring.net
Spring.NET为建立企业级应用提供了一套轻量级的解决方案。通过Spring.NET,我们可以用统一且透明的方式来配置应用程序。Spring.NET的重点是为中间层提供声明式事务管理,以及一个功能齐全的ASP.NET扩展框架。Spring.NET是非侵入式的,代码对框架本身不会产生任何依赖。
外文名 spring.net 领 域 计算机 相 关 Spring NET 发布时间 2009年08月05日
目录
1 简介
2 版本发布
简介
Spring.Core 库是框架的基础, 提供依赖注入功能。Spring NET中大多数类库依赖或扩展了Spring.Core的功能。IObjectFactory接口提供了一个简单而优雅的工厂模式,移除了对单例和一些服务定位stub的必要。允许你将真正的程序逻辑与配置解耦。作为对IObjectFactory 的扩展,IApplicationContext接口也在Spring.Core库中,
Spring DOTNET 是一个关注于.NET企业应用开发的应用程序框架。它能够提供很多方面的功能,例如控制反转(Inversion of Control,英文缩写为IoC)、依赖注入(Dependency Injection,英文缩写DI)、面向方面编程(AOP)、数据访问抽象, 以及ASP DOTNET集成等。基于java的spring框架的核心概念和价值已被应用到.NET。Spring DOTNET 1.0 包含一个完全功能的依赖注入容器和AOP库。后续的发布将包含对ASP DOTNET、Remoting和数据访问的支持。[1]
版本发布
2009年08月05日,Spring NET 1.3.0 RC1 发布,该版本包含了下面几个方面的新特性:
TIBCO EMS一体化- Helper类来提高你的生产力发展中消息传递应用程序与TIBCO EMS基础。
NVelocity集成- Helper类配置一个模板引擎在Sprint NVelocity基础应用程序
VS 的解决方案模板——VS .NET 2008年建立解决方案模板,让你快速建立并运行应用程序创建Spring的基础。
DI支持企业服务组件
其他值得注意的新特性:
NHibernate 2.1和ActiveMQ NMS 1.1支持。
更新和记录NHibernate 2.1快速入门应用程序。
spring NHibernate字节码服务提供方程序来支持基于DI的NH实体。[
2010年12月16日,Spring 1.3.1 发布,该版本包含以下主要特性:
名称空间解析器对WCF的集成
初始ASPNET MVC 2集成为核心的依赖注入功能
支持DI使用WCF的WebServiceHostFactory
本机。净4编译程序集
支持多个数据库之间的切换在运行时当使用NHibernate
支持NHibernate 3.0 GA版本
升级的石英。净支持1.0.3版本
apache nms的升级。ActiveMQ支持版本1.4.1
超过100个bug修复和其他改进。
========
Spring.NET学习笔记
——目录(原)
http://www.cnblogs.com/GoodHelper/archive/2009/11/20/SpringNet_Index.html
目录
前言
Spring.NET学习笔记——前言
第一阶段:控制反转与依赖注入IoC&DI
Spring.NET学习笔记1——控制反转(基础篇) Level 200
Spring.NET学习笔记2——环境搭建(基础篇) Level 200
Spring.NET学习笔记3——实现一个简易的IoC框架(练习篇) Level 100
Spring.NET学习笔记4——对象的创建(基础篇) Level 200
Spring.NET学习笔记5——容器中对象的作用域(基础篇) Level 200
Spring.NET学习笔记6——依赖注入(应用篇) Level 300
Spring.NET学习笔记7——依赖对象的注入(基础篇) Level 200
Spring.NET学习笔记8——集合类型的注入(基础篇) Level 200
Spring.NET学习笔记9——打造简易的依赖注入框架(练习篇) Level 100
Spring.NET学习笔记10——方法的注入(基础篇) Level 200
Spring.NET学习笔记11——自定义对象行为(基础篇) Level 200
SVN全部代码下载:
http://springnetalldemo1.googlecode.com/svn/trunk/
第二阶段:面向切面编程AOP
Spring.NET学习笔记12——面向切面编程(基础篇) Level 300
Spring.NET学习笔记13——AOP的概念(基础篇) Level 200
Spring.NET学习笔记14——AOP的通知类型(基础篇) Level 300
Spring.NET学习笔记15——AOP的配置(基础篇) Level 200
SVN全部代码下载:
http://springnetalldemo2.googlecode.com/svn/trunk/
第三阶段:集成Nhibernate与ASP.NET MVC开发
Spring.NET学习笔记16——事务管理(应用篇) Level 200
Spring.NET学习笔记17——事务传播行为(基础篇) Level 200
Spring.NET学习笔记18——整合NHibernate(基础篇) Level 300
Spring.NET学习笔记19——整合NHibernate和ASP.NET MVC(基础篇) Level 300
SVN全部代码下载:
http://springnetalldemo3.googlecode.com/svn/trunk/
第四阶段:面向服务编程
Spring.NET学习笔记20——整合Remoting(应用篇) Level 200
Spring.NET学习笔记21——整合Web Service(应用篇) Level 200
Spring.NET学习笔记22——整合WCF(应用篇) Level 200
第五阶段:扩展集成
Spring.NET学习笔记23——整合ActiveMQ(应用篇) Level 200 (未完)
Spring.NET学习笔记24——整合MSMQ(应用篇) Level 200 (未完)
Spring.NET学习笔记25——整合Quartz.NET(应用篇) Level 200
Spring.NET学习笔记26——整合NVelocity(应用篇) Level 200
综合应用:企业架构体系实战
Spring.NET企业架构实践之 JQuery + FlexiGrid + ASP.NET MVC + NVelocity + WCF + LINQ + NHibernate 综合应用
Spring.NET企业架构实践之 Nhibernate + ActiveMQ + ASP.NET MVC + NVelocity 对PetShop4.0重构 (未完)
========
Spring.net使用说明
http://www.cnblogs.com/xdot/p/5988431.html
使用方法:
1.在配置文件设置Spring.net 节点
在配置节中,声明Spring.net,配置 context,objects 标签,来源(type)
<!--配置节:主要用来 配置 asp.net框架之外的 标签,告诉asp.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>
<!--配置 Spring.net 容器 要读取的 配置文件 位置和方式-->
<context>
<!--
<resource uri="assembly://SpringLover/SpringLover/Objects.xml"/> 配置程序集里的文件
<resource uri="~/MyObjects.xml"/> 配置相对根目录的文件
<resource uri="file://D:objects.xml"/> 配置绝对路径文件
-->
<resource uri="config://spring/objects" /> <!--直接配置【配置文件的objects标签】 告诉spring.net容器,对象的配置节点就在 当前配置文件的spring/objects节点中-->
</context>
<!--配置 Spring.net 容器 要创建的对象-->
<!--<objects>
<!--id为对象ID,type前为【要使用的类名】,后为【程序集名称】,property为设置对象的值,如在这是设置对象名称为小白-->
<object id="usr" type="SevenOA.MODEL.Ou_UserInfo,SevenOA.MODEL">
<property name="uLoginName" value="小白~~~"></property>
</object>
<!--配置 业务仓储 和 数据仓储-->
<object id="bllSession" type="SevenOA.Service.BLLSession,SevenOA.Service"></object>
<object id="dbSession" type="SevenOA.Respository.DBSession,SevenOA.Respository"></object>
</objects>-->
</spring>
2. 读取文件
使用这种方式来读取Spring.net的数据:
IApplicationContext ctx = Spring.Context.Support.ContextRegistry.GetContext();
//2.1.获取Spring容器(自动读取 Spring 配置文件)
public static IApplicationContext GetSpringContains()
{
return ContextRegistry.GetContext();
}
//2.根据 键 获取 配置好的 对象!
public static T GetObject<T>(string objId)
{
return (T)GetSpringContains().GetObject(objId);
}
3.使用Spring.net
直接根据 键ID 获取 配置好的 对象!
========
第三章 Spring.Net 环境准备和搭建
http://www.cnblogs.com/cilence/archive/2013/02/22/2921987.html
在前面一章我们介绍了依赖注入,控制反转的概念。接下来我们来真正动手搭建一下Spring.Net的环境,看一下Spring.Net 中的控制反转和依赖注入是什么样子。
3.1 Spring.Net 下载
在Spring.Net的官方网站http://www.springframework.net/ 我们可以下载到关于Spring.Net所有资料,包括安装文件,文档以及代码。我们使用Spring.Net 框架经常要使用到的是一下文件:
Common.Logging.dll 包含了Spring.Net日志方面的功能(必须)
Spring.Core.dll 包含了Spring.Net 的核心库(必须)
Spring.Data.dll 包含了Spring.Net 的数据访问功能
Spring.Aop. dll 包含了Spring.Net 对面向切面编程(AOP)的支持
Spring.Web.dll 包含了Spring.Net 对ASP.NET进行了一系列功能扩展
3.2 Spring.Net 的配置介绍
下载完Spring.Net相关文件后,我们要使用Spring.Net框架还需要进行一些简单的配置。
Spring.Net 的配置文件(一般情况下加入到App.Config或者Web.Config中):
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="spring">
<!--提供Spring对应用程序上下文的支持-->
<section name="context" type="Spring.Context.Support.ContextHandler,Spring.Core"/>
<!--提供Spring对 对象容器的支持-->
<section name="objects" type="Spring.Context.Support.DefaultSectionHandler,Spring.Core"/>
</sectionGroup>
</configSections>
<spring>
<context>
<!--Spring中 IOC容器 所使用的对象XML文件定义-->
<resource uri="assembly://CnblogLesson_3_2/CnblogLesson_3_2.Config/Objects.xml"/>
</context>
</spring>
</configuration>
Spring.Net 对象的配置文件:
<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net">
<object id="readerDal" type="CnblogLesson_3_2.ReaderDAL,CnblogLesson_3_2">
</object>
</objects>
在基于XML定义的对象中,<object>是一个节点,所有节点的父节点必须是<objects>,在<objects xmlns="http://www.springframework.net"> 的属性中xmlns是必须的。并且必须将XML设置为嵌入式资源,单击右键--》属性--》生成操作设置为嵌入的资源,否则Spring.Net 无法初始化Object。
3.3 开始搭建Spring.Net 的环境
首先,我们仍然是先准备好Spring.Net 的相关文件,在这里我目前使用的是Spring.NET-1.3.2(由于文件有50多M,大家可以到各大网站去下载),然后打开Visual Studio,创建一个控制台项目。由于我现在使用的是.NetFramework 4.0, 所以我找到Spring.NET-1.3.2.zip\Spring.NET\bin\net\4.0\release下,将需要的文件引用到项目中。在这里,我为了方便就全部将常用的文件全部添加进项目了,并将这些文件添加引用。
其次,我们需要添加Spring.Net 的配置文件以及Spring.Net 对象的配置文件(如:Config/Objects.xml),由于是控制台项目,这里就添加App.Config作为配置文件。3.2节已经给出Spring.Net 配置文件以及Spring.Net 对象的配置的写法。
接下来,我们再添加代码文件。为了方便理解,举的例子依然是,第二章“获取博客园文章”的例子。除了ReaderService.cs的代码是使用Spring.Net 依赖注入方式来实现,其他的类都没有变化。
using System;
using Spring.Context;
using Spring.Context.Support;
using Spring.Core.IO;
using Spring.Objects.Factory.Xml;
using Spring.Objects.Factory;
namespace CnblogLesson_3_3
{
/// <summary>
/// 读取文章的业务逻辑类
/// </summary>
public class ReaderService : IReaderService
{
/// <summary>
/// 读取文章的数据访问类对象
/// </summary>
private IReaderDAL dal;
public ReaderService()
{
/*是通过XmlObjectFactory或者是IApplicationContext来配置可以二者选其一*/
//或者是通过XmlObjectFactory配置
IResource input = new FileSystemResource("file:///C:/Objects.xml");
IObjectFactory factory = new XmlObjectFactory(input);
dal = (IReaderDAL)factory.GetObject("readerDal");
//通过IApplicationContext来配置
IApplicationContext context = ContextRegistry.GetContext();
dal = (IReaderDAL)context.GetObject("readerDal");
}
/// <summary>
/// 读者的名字
/// </summary>
private string Name { get; set; }
/// <summary>
/// 读取文章的方法
/// </summary>
public void GetArticle()
{
dal.GetArticle();
}
}
}
添加Config/Objects.xml文件
对象之间通常会相互协作,我们也可以说他们相互具有依赖性,Spring.Net 提供了一个接口IObjectFactory。我们通过IObjectFactory接口是初始化.配置以及管理对象的容器(它是所有容器的父接口)。
其中有三个重要的专有名词以下会做详细的解释: 对象,对象工厂,应用程序上下文。
<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<object id="readerDal" type="CnblogLesson_3_3.ReaderDAL,CnblogLesson_3_3">
</object>
</objects>
Object 就是配置文件中所配置的对象,前面一直说的对象,就是上面配置的readerDal。
IObjectFactory接口为Spring.Net 提供了一种高级的配置机制来管理和维护对象。
IApplicationContext接口则扩展了IObjectFactory,增加了面向切面编程 的功能和消息资源处理等功能。
Spring.Objects.Factory.IObjectFactory有多个实现类,最常用的就是
Spring.Objects.Factory.Xml.XmlObjectFactory,通过XmlObjectFactory 我们可以通过配置xml文件来定义和装配以及发布服务对象。
简单的说,IObjectFactory接口提供了配置框架和基本功能,IApplicationContext接口又在其基础上扩展了许多企业级特性。可以说IApplicationContext是IObjectFactory的一个超集,具备IObjectFactory所有的功能与行为。
上面这些话可能都太概念性了,接下来我们看一下在CnblogLesson_3_3中的示例,我们使用Spring.Objects.Factory.Xml.XmlObjectFactory来管理对象:
1 //或者是通过XmlObjectFactory配置
2 IResource input = new FileSystemResource("file:///C:/Objects.xml");
3 IObjectFactory factory = new XmlObjectFactory(input);
4 dal = (IReaderDAL)factory.GetObject("readerDal");
其中,关于IResource接口,非常重要,我们稍后会有专门的章节一起来和大家讨论,我们现在,只需要知道它是读取资源的接口就行了。
所谓的,
对象:就是示例中的 CnblogLesson_3_3.ReaderDAL 类的实例。
对象工厂:IObjectFactory对象的示例,由于new XmlObjectFactory(input);得到的就是一个对象工厂实例。
1 //通过IApplicationContext来配置
2 IApplicationContext context = ContextRegistry.GetContext();
3 dal = (IReaderDAL)context.GetObject("readerDal");
其中,应用程序上下文: ContextRegistry.GetContext();创建出来的就是应用程序上下文。
通过前面的示例我们可以看到通过Spring.Net降低了业务逻辑层与数据访问层的耦合,但是实际上并没有完全解决耦合,只是把耦合放到了Object.XML 文件中。通过一个容器在程序运行的时候才形成依赖关系,即把接口的实现动态注入到类中。我通常把这种IOC的模式,看成一个升级版本的工厂模式,把Spring.Net的IOC容器看成一个大工厂,只不过这个工厂产生的对象都是在外部XML文件定义的。
========
参考资源
http://blog.csdn.net/xiaoguang44/article/details/7721993?locationNum=4
http://www.cnblogs.com/fly_dragon/archive/2010/09/06/1819547.html
http://stackoverflow.com/questions/7478180/spring-net-nhibernate-mvc3-your-opinions-please
http://www.gitshah.com/2011/08/integrating-springnet-with-mvc3.html