第一章 Spring.Net介绍
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介绍的更多相关文章
- [Learn Android Studio 汉化教程]第一章 : Android Studio 介绍
注:为了看上去比较清晰这里只转载了中文 原地址: [Learn Android Studio 汉化教程]第一章 : Android Studio 介绍 本章将引导您完成安装和设置开发环境,然后你就可 ...
- 深入Java虚拟机读书笔记第一章Java体系结构介绍
第1章 Java体系结构介绍 Java技术核心:Java虚拟机 Java:安全(先天防bug的设计.内存).健壮.平台无关.网络无关(底层结构上,对象序列化和RMI为分布式系统中各个部分共享对象提供了 ...
- Ionic 入门与实战之第一章:Ionic 介绍与相关学习资源
原文发表于我的技术博客 本文是「Ionic 入门与实战」系列连载的第一章,主要对 Ionic 的概念.发展历程.适配的移动平台等知识进行了介绍,并分享了 Ionic 相关的学习资源. 原文发表于我的技 ...
- [翻译]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 ...
- 第一章001-003课程介绍、计算机网络概述、Internet概述
计算机网络概述 课程安排: 第一章:概述 第二章:物理层 第三章:数据链路层 第四章:网络层 第五章:运输层 第六章:应用层 第七章:网络安全 第八章:因特网上的音频/视频服务 第九章:无线网络 第十 ...
- 第一章 : Android Studio 介绍 [Learn Android Studio 汉化教程]
摘自:http://ask.android-studio.org/?/question/789,为便于学习重新整理.. 本章将引导您完成安装和设置开发环境,然后你就可以跟随本书的例子和课程学习. 首先 ...
- 第一章 spring核心概念
一.Spring作用:管理项目中各种业务Bean(service类.Dao类.Action类),实例化类,属性赋值 二.Spring IOC(Inversion of Control )控制反转,也被 ...
- 第一章 Spring Security是什么?
1. 介绍 1.1 Spring Security是什么? Spring Security是一个强大的和高度可定制的身份验证和访问控制框架. 它是保证基于spring的应用程序安全的实际标准. 1.2 ...
- Netty In Action中文版 - 第一章:Netty介绍
本章介绍 Netty介绍 为什么要使用non-blocking IO(NIO) 堵塞IO(blocking IO)和非堵塞IO(non-blocking IO)对照 Java NIO的问题和在Nett ...
随机推荐
- 搭建MAC下vim环境
MAC下的IDE实在是不好用,最终放弃了IDE准备直接用vim来看代码了,那么就需要设置一下vim. 将家目录下面.vim中的vimrc用下面的内容替换: " Set vundle sett ...
- python鸭子类型(duck type)
1.什么是鸭子类型顾名思义,就是看起来像鸭子的类型,就可以叫做鸭子类型所以,鸭子类型是一种不严格的类型,弱类型有相同方法的类型,可以归为一类鸭子.2.鸭子类型示例 class dog: def run ...
- Oracle PLSQL Demo - 08.定义显式游标[Define CURSOR, Open, Fetch, Close CURSOR]
declare v_empno scott.emp.empno%type; v_sal scott.emp.sal%type; cursor cur_emp is select t.empno, t. ...
- dwz 取不到 form中的值
在使用dwz的时候,出现的一个问题, <li style=" width:160px;"> <label style=" width:60px;&quo ...
- js 的登录验证
$scope.startLogin = function () { console.log('loginTimeHelper:startLogin: ' + getCurrentTime()); ef ...
- Linux shell 执行修改配置文件中的内容
在开发的过程中可能Linux环境不一致需要适应本地环境的HOME目录,可以通过脚本来修改配置文件内容,写一个test.sh的脚本 在脚本里写入以下命令 sed -i “s#ftfts_com_serv ...
- 刷新页面要通过F5
而不是选中地址栏再按enter键,这样可能产生两种问题: 1.地址栏中的URL可能包括你上次提交的参数,你按了enter之后可能导致上次提交的参数重复提交 2.可能导致根本就没有刷新页面,刚才我修改了 ...
- centos6.4或者6.5使用yum的elrepo源升级内核
本文转自:http://www.511yj.com/centos-yum-kernel.html 今天想在centos6.5安装docker,在网上查了说centos6.5需要64位的,内核需要升级到 ...
- C语言 · 核桃的数量
历届试题 核桃的数量 时间限制:1.0s 内存限制:256.0MB 锦囊1 最小公倍数. 锦囊2 答案是a, b, c的最小公倍数. 问题描述 小张是软件项目经理,他带领3个 ...
- 如何在WebService中重载方法
1. 本来在WebService中这样写的重载方法,如下所示: [WebService(Namespace = "http://tempuri.org/")] [WebSer ...