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. [Learn Android Studio 汉化教程]第一章 : Android Studio 介绍

    注:为了看上去比较清晰这里只转载了中文 原地址:  [Learn Android Studio 汉化教程]第一章 : Android Studio 介绍 本章将引导您完成安装和设置开发环境,然后你就可 ...

  2. 深入Java虚拟机读书笔记第一章Java体系结构介绍

    第1章 Java体系结构介绍 Java技术核心:Java虚拟机 Java:安全(先天防bug的设计.内存).健壮.平台无关.网络无关(底层结构上,对象序列化和RMI为分布式系统中各个部分共享对象提供了 ...

  3. Ionic 入门与实战之第一章:Ionic 介绍与相关学习资源

    原文发表于我的技术博客 本文是「Ionic 入门与实战」系列连载的第一章,主要对 Ionic 的概念.发展历程.适配的移动平台等知识进行了介绍,并分享了 Ionic 相关的学习资源. 原文发表于我的技 ...

  4. [翻译]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 ...

  5. 第一章001-003课程介绍、计算机网络概述、Internet概述

    计算机网络概述 课程安排: 第一章:概述 第二章:物理层 第三章:数据链路层 第四章:网络层 第五章:运输层 第六章:应用层 第七章:网络安全 第八章:因特网上的音频/视频服务 第九章:无线网络 第十 ...

  6. 第一章 : Android Studio 介绍 [Learn Android Studio 汉化教程]

    摘自:http://ask.android-studio.org/?/question/789,为便于学习重新整理.. 本章将引导您完成安装和设置开发环境,然后你就可以跟随本书的例子和课程学习. 首先 ...

  7. 第一章 spring核心概念

    一.Spring作用:管理项目中各种业务Bean(service类.Dao类.Action类),实例化类,属性赋值 二.Spring IOC(Inversion of Control )控制反转,也被 ...

  8. 第一章 Spring Security是什么?

    1. 介绍 1.1 Spring Security是什么? Spring Security是一个强大的和高度可定制的身份验证和访问控制框架. 它是保证基于spring的应用程序安全的实际标准. 1.2 ...

  9. Netty In Action中文版 - 第一章:Netty介绍

    本章介绍 Netty介绍 为什么要使用non-blocking IO(NIO) 堵塞IO(blocking IO)和非堵塞IO(non-blocking IO)对照 Java NIO的问题和在Nett ...

随机推荐

  1. AAuto 快速开发win32小程序

    AAuto编程语言 AAuto是专用于桌面软件快速开发的新一代混合型编程语言 -  具有动态语言轻便.灵活.快速开发的特性,而且又可以同时支持静态类型开发,象静态语言那样使用.AAuto可以直接支持原 ...

  2. 交叉编译busybox

    交叉编译器: 3.3.2# wget -c http://www.busybox.net/downloads/busybox-1.7.0.tar.bz2# tar jxvf busybox-1.7.0 ...

  3. JVM致命错误日志(hs_err_pid.log)分析(转载)

    当jvm出现致命错误时,会生成一个错误文件 hs_err_pid<pid>.log,其中包括了导致jvm crash的重要信息,可以通过分析该文件定位到导致crash的根源,从而改善以保证 ...

  4. 浅谈C#委托和事件【转】

    委托给了C#操作函数的灵活性,我们可使用委托像操作变量一样来操作函数,其实这个功能并不是C#的首创,早在C++时代就有函数指针这一说法,而在我看来委托就是C#的函数指针,首先先简要的介绍一下委托的基本 ...

  5. 一款基于jquery带百分比的响应式进度加载条

    今天要给大家带来一款基于jquery带百分比的响应式进度加载条.这款加载条非常漂亮,而且带有进度的百度比,且在不同的百分比用的是不同的颜色.而且这款加载条采用了响应式设计,在不同的分辨率的显示器下完美 ...

  6. SpringMVC @RequestMapping 用法详解之地址映射

    @RequestMapping 用法详解之地址映射 http://blog.csdn.net/walkerjong/article/details/7994326

  7. JavaScrip——对话框的简单应用(判断isNaN)

    综合运用 isNaN的用法:判断是不是一个合法的数字类型,是数字返回false,不是返回true 1.我们用prompt来接收输入的内容 2.通过isNaN来做判断 3.最后用alert输出结果 &l ...

  8. linux访问ftp服务器命令

    在linux访问时输入 用户名 anonymous 密码直接回车可以匿名登录 如果传输非文本,先输入bianry,然后再get就可以了 比如 ftp> get 5-4.tif 227 Enter ...

  9. 查看linux硬件信息

    more /proc/cpuinfo more /proc/meminfo more /proc/*info lspci 查看主板信息等cat /proc/cpuinfo CPU信息cat /proc ...

  10. kettle的报错解决机制

    在kettle执行的过程中,如果遇到错误,kettle会停止运行.在某些时候,并不希望kettle停止运行,这时候可以使用错误处理(Step Error Handling).错误处理允许你配置一个步骤 ...