转自:http://www.cnblogs.com/cilence/archive/2013/02/21/2920478.html

Spring.NET下载地址:http://www.springframework.net/

各大主流.Net的IOC框架性能测试比较 http://www.cnblogs.com/liping13599168/archive/2011/07/17/2108734.html

Castle IOC容器与Spring.NET配置之比较 http://terrylee.cnblogs.com/archive/2006/04/25/384149.html

1.1 概述

  在Java社区中Spring经历的长时间的考验,已经是一套很成熟稳定的框架。而Spring.Net 的前身是 Java版的Spring。Spring.Net是以Java版的Spring框架为基础,将Spring(Java版)的概念和编程思想移植到.Net平台上来。

  Spring.Net 是一个应用程序框架,它的目的是帮助软件开发人员创建企业级的.Net应用程序。它提供了很多方面的功能,比如依赖注入,面向切面编程(AOP),数据访问抽象以及ASP.Net扩展等等的功能。

  Spring.Net 框架是一套轻量级的面向企业级应用的开源框架。Spring.Net 不仅是开源的,而且Spring.Net 还提供了众多的功能,软件过程中几乎80%工作都能通过它完成。虽然Spring.Net 功能众多,但是使用Spring.Net后对于我们的应用程序消耗来说却是微不足道的,它是非侵入式的(几乎所有的功能,可以通过配置文件来管理,而开发人员可以使用Spring.Net 中一个功能模块或者同时使用多个功能模块。在使用Spring.Net的功能模块中,可以只通过配置就能完成,并且不影响原有的开发方式),正是由于这种非侵入式,因此Spring.Net 框架才被称为面向企业级应用轻量级功能完善的开源框架。

1.2 之前我们如何软件开发

  在企业级应用中一般都是很复杂的,不像我们以前在学校开发的XX管理系统那样。企业级应用中我们通常都使用 三层结构(多层结构)来将应用程序划分为若干个功能层。如数据访问层,业务逻辑层,表示层等等。例如:通常表示层需要调用业务逻辑层的方法,业务逻辑层需要调用数据访问层的方法,数据访问层需要访问数据库。不管应用程序如何构建,最终都是相互协作(各层之间的调用)的对象。这些对象一起组成了完整的应用程序(我们开发的软件)。所以我们一直说,软件中对象与对象之间具有相互依赖性。当软件复杂到一定程度的时候(企业级应用就很复杂了),如果软件架构的不好,各层之间依赖性太强,这个时候当需求发生变化的时候,我们就无法让我们的软件去适应这些变化,最终导致我们的软件流产。

  微软.Net平台为构建软件提供了丰富的功能。从基元类型到基础类库,以及到功能完善的WinForm和Asp.Net 框架。但是可能是由于之前没有开源的原因,造成.Net社区一直没有发展壮大起来。而.Net平台本身并没有提供任何方式来管理业务逻辑并将他们以适当的方式组织起来的解决方案,以前只能是架构师或者开发人员去创建应用程序。可是在我们国家的确是人才有限,好的架构师不是每个团队都有。

  诚然,目前有很多设计模式可用于业务领域的设计,我们使用这些设计模式可以将类或者对象比较好的组合起来构建我们的软件。如:工厂,抽象工厂,建造者,装饰者,以及代理模式等等,已经被现今的软件开发行业广泛接受和采用(这可能就是这些设计模式很早就被定型为模式的原因,在90年代Gof就出版了《设计模式:可复用面向对象软件的基础》一书),这些模式都很好,他们大部分都是定型的已命名的编程方式,这些模式一般都会说,在什么场合下使用,能解决什么问题。

1.3 Spring.Net 所解决的问题

  Spring.Net 是一套业务逻辑层的框架,它在我们的软件开发中起着承上启下的作用(上有表示层,下有数据访问层)。在Spring.Net中大量使用了设计模式,如果我们在软件开发中合理规范的使用Spring.Net 框架,开发人员无需达到架构师的水平就能够比较好驾驭我们的应用程序,并且提高开发效率。

  在Spring.Net的IOC(控制反转:稍后会和大家详细谈到)容器所解决的,正是如何在企业级应用中如何有效,合适的将类和对象以及服务组合成应用程序的问题。IOC容器通过正统(正统的意思是,这些方式都是经过业界多年考验,已经定型了为设计模式的最佳编程方式)的将分散的组件或者类以及对象组合成完整的应用程序。Spring.Net 将他们有效的整合起来。Spring.Net大大减少了各个层次之间的耦合,分离了关注点(我们以前关注数据访问方式,页面逻辑等等)让开发人员有更多的精力只关注于业务逻辑。它为我们创建出具有扩展性,维护性的软件提供了基础。

1.4  背景

  在2004年初,Martin Fowler曾经问他网站的读者:当我们谈到控制反转时,“问题是,它们反转的是哪方面的控制?”。随后Fowler建议为控制反转重新命名(或者起码给它一个更具自我描述性的名字),所以依赖注入(Dependency Injection)这一术语才得以使用。Fowler在论文中也讨论了控制反转和依赖注入原理背后的一些概念。如果您需要了解正宗的IoC和DI理论,可以参考这篇论文:http://martinfowler.com/articles/injection.html

1.5  控制反转 VS 依赖注入

  控制反转(IOC) 和 依赖注入(DI) ,其实它们是同一个概念的不同角度的描述,由于控制反转概念比较模糊(可能只是理解为容器控制对象这一个层面,很难让人想到谁来维护对象关系),所以2004年大师级别人物Martin Flower又给出了一个新名字:”依赖注入”,相对控制反转而言,“依赖注入”又 确描述了被注入对象依赖IOC容器配置以来对象。

以下会有专门的章节帮我们来理解什么是 控制反转 和 依赖注入。

1.6  Spring.Net 整体结构以及模块

          (图1  Spring.Net框架的整体结构:该图出自Spring.Net 官方网站)

  Spring.NET框架包括很多功能,这些功能被很好的组织进一系列模块当中,如下图所示。Spring.NET 1.0包括完整的IoC容器和AOP类库。1.1版将加入Web、ORM和数据模块。Spring.NET的下载包中并不包含与其它类库(如NHibernate,TIBCO EMS,Anthem,和IIOP.NET)集成的模块,如果需要您可以单独下载。上图为Spring.NET的各个核心模块。灰色阴影部分在1.0版中已经可用了,其它模块会在未来版本中陆续发布。目前可以从Spring.Net的官方网站上单独下载这些新的模块。

(1)     Spring.Core:

作为整个框架的基础,实现了依赖注入的功能。Spring.NET的大部分模块都要依赖或扩展该模块。Spring.Core的基础是IObjectFactory接口,该接口用一个简单而优雅的方式实现了工厂模式,使我们可以无需自行编写singleton类型和众多的服务定位器,并允许将对象配置及其依赖关系与具体的程序逻辑解耦。该模块中的IApplicationContext接口是IObjectFactory的扩展,增加了诸多企业级功能,包括使用资源文件进行文本本地化、事件传播和资源装载等等。

(2)     Spring.AOP:

为业务对象提供面向方面编程(AOP)的支持。AOP完善了IoC容器的功能,为创建企业应用和使用声明式服务奠定了坚实的基础。

(3)     Spring.Web:

对ASP.NET进行了一系列功能扩展,包括对ASP.NET页面进行依赖注入、双向数据绑定、在ASP.NET 1.1中使用Master page、以及增强的本地化功能支持等。

(4)     Spring.Services:

允许将任意的“普通”对象(意为没有继承任何指定基类型的对象)发布为企业服务(COM+)或远程对象。通过依赖注入和特性元数据覆盖等功能,该模块可使.NET的Web服务获得极大的灵活性。同时也支持Windows后台服务。

(5)     Spring.Data:

定义了一个抽象的数据访问层,可以跨越各种数据访问技术(从ADO.NET到各种ORM)进行数据访问。该模块包含一个ADO.NET的抽象层,减少了使用传统ADO.NET进行编码和事务管理时的工作量。

(6)     Spring.ORM:

为时下流行的ORM类库( 如:Nhibernate, Ibatis.Net等)提供了一个整合层,其中包含声明式事务管理等诸多功能。

[转]Spring.Net介绍的更多相关文章

  1. Spring Batch 中文参考文档 V3.0.6 - 1 Spring Batch介绍

    1 Spring Batch介绍 企业领域中许多应用系统需要采用批处理的方式在特定环境中运行业务操作任务.这种业务作业包括自动化,大量信息的复杂操作,他们不需要人工干预,并能高效运行.这些典型作业包括 ...

  2. [翻译]Spring框架参考文档(V4.3.3)-第二章Spring框架介绍 2.1 2.2 翻译--2.3待继续

    英文链接:http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/overview.ht ...

  3. Spring 的介绍和目标

    1. Spring介绍 打开Spring 官网查看对 Spring 的介绍和目标 http://www.springsource.org/about We believe that: · J2EE s ...

  4. Spring的介绍与搭建

    一.Spring的介绍 二.Spring的搭建 (1)导包 (2)创建一个对象 (3)书写配置注册对象到容器 (4)代码测试

  5. Spring Shell介绍

    最近开发中在下遇到了spring-shell开发工具的项目,现在整理了相关文章,以供大家学习 本博客相关的文章均是在Spring Shell 1.2.0的基础上建立   Spring Shell介绍 ...

  6. Spring DevTools 介绍

    Spring DevTools 介绍 Spring Boot包括一组额外的工具,可以使应用程序开发体验更加愉快. spring-boot-devtools模块可以包含在任何项目中,它可以节省大量的时间 ...

  7. 第1章—Spring之旅—Spring模块介绍

    Spring模块介绍 Spring7大核心模块: 核心容器(Spring Core) 核心容器提供Spring框架的基本功能.Spring以bean的方式组织和管理Java应用中的各个组件及其关系.S ...

  8. Spring Security 介绍与Demo

    一.Spring Security 介绍 Spring Security 是针对Spring项目的安全框架,也是Spring Boot底层安全模块的默认技术选型.我们仅需引入spring-boot-s ...

  9. [转帖]微服务框架Spring Cloud介绍 Part1: 使用事件和消息队列实现分布式事务

    微服务框架Spring Cloud介绍 Part1: 使用事件和消息队列实现分布式事务 http://skaka.me/blog/2016/04/21/springcloud1/ APR 21ST,  ...

  10. Spring 框架介绍

    Spring 框架介绍 Spring 框架模块 Spring开发环境搭建(Eclipse) 创建一个简单的Spring应用 Spring 控制反转容器(Inversion of Control – I ...

随机推荐

  1. 原生API实现拖拽上传文件实践

    功能: 拖拽上传文件.图片,上传的进度条,能够同时上传多个文件. 完整的demo地址:https://github.com/qcer/FE-Components/tree/master/QDrag 涉 ...

  2. js系列教程1-数组操作全解

    全栈工程师开发手册 (作者:栾鹏) 快捷链接: js系列教程1-数组操作全解 js系列教程2-对象和属性全解 js系列教程3-字符串和正则全解 js系列教程4-函数与参数全解 js系列教程5-容器和算 ...

  3. Ubuntu16.04下Office替代品Office Online

    Ubuntu16.04下Office替代品 Ubuntu16.04下的office Libreoffice 这个是Ubuntu自带的Office,总是存在各种问题,如果用来阅读还是不错的,但是编辑就不 ...

  4. OpenSCAD 建模:矿泉水瓶盖

    下载地址:https://github.com/ZhangGaoxing/openscad-models/tree/master/BottleCap 代码: module screw(r=){ ::] ...

  5. Bootstrap 禁用滚动条

    Bootstrap中禁用滚动条的方法 逻辑: 当点击弹窗按钮后,js会为body元素添加一个modal-open的类,该类主要内容如下 .modal-open .modal { overflow-x: ...

  6. C#实现软件开机自启动原理与代码

    1.软件自启动原理 软件自启动的原理要从Windows的注册表聊起,在Windows操作系统下,主要有2个文件夹和8个注册表键项控制程序的自启动,这部分的详细介绍可以参看博客http://www.cn ...

  7. 个人怎么申请微信小程序

    1.打开微信公众平台(mp.weixin.qq.com).拉到中间的"账号分类",鼠标悬浮于"小程序"框中并点击"查看详情". 2.进入微信 ...

  8. win7与centos虚拟机的共享文件夹创建

    本文在win7环境下,在virtualbox5.0.16中的虚拟机centos6.7创建linux虚拟机与win7主机的共享文件夹. 首先点击virtualbox上"设置"按钮,在 ...

  9. clone对象

    在JavaScript中,当对象作为参数传给函数的时候,在函数内部对这个对象的属性进行修改时,函数外部的对象属性也会跟着被修改,而有些时候我们并不想原来的对象数据发生改变,这时候就需要切断对象之间的引 ...

  10. LeetCode 543. Diameter of Binary Tree (二叉树的直径)

    Given a binary tree, you need to compute the length of the diameter of the tree. The diameter of a b ...