密炼web应用spring框架培训课件_第1页
密炼web应用spring框架培训课件_第2页
密炼web应用spring框架培训课件_第3页
密炼web应用spring框架培训课件_第4页
密炼web应用spring框架培训课件_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Spring.NET框架应用及优劣势探讨信息工程事业部袁洋 2012.12Spring.Net框架探讨内容目录第一部分简单的介绍Spring.NET第二部分为何要使用Spring.Net框架第三部分Spring.Net各功能的探讨简单的介绍Spring.NETSpring.Net框架介绍Spring.Net模块介绍第一部分Spring.NET框架简介Spring.NET是一个应用程序框架,其目的是协助开发人员创建企业级的.NET应用程序。它提供了很多方面的功能,比如依赖注入、面向方面编程(AOP)、数据访问抽象及ASP.NET扩展等等。Spring.NET以Java版的Spring框架为基础,

2、将Spring.Java的核心概念与思想移植到了.NET平台上。Spring.Net框架特点轻量从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的DLL文件里发布。并且Spring所需的处理开销也是微不足道的。非侵入 在应用中,一般不需要引用spring包里的类。控制反转Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,某一接口的具体实现类的选择控制权从调用类中移除,转交给第三方裁决。 面向切面Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务进行内聚性的开发。应用对象只实现它们应该做的完成

3、业务逻辑仅此而已。它们并不负责其它的系统级关注点,例如日志或事务支持。Spring即是一个容器又是一个框架。容器Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个Object如何被创建,你的Object可以创建一个单独的实例或者每次需要时都生成一个新的实例以及它们是如何相互关联的。 框架Spring提供了很多基础的与业务逻辑无关的功能,比如:事务管理、持久化框架集成等等,使用Spring框架,开发人员可以专注于业务逻辑开发,这个意义上讲它是一个框架。 Spring.Net模块介绍Spring.NET框架包含了许多功能方面,各核心模块如图所示:Sprin

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

5、编程(AOP)的支持。AOP完善了IoC容器的功能,为创建企业应用和使用声明式服务奠定了坚实的基础。Spring.Data定义了一个抽象的数据访问层,可以跨越各种数据访问技术(从ADO.NET到各种ORM)进行数据访问。该模块包含一个ADO.NET的抽象层,减少了使用传统ADO.NET进行编码和事务管理时的工作量。Spring.Data.NHibernate使用此模块集成到Spring的声明式事务管理功能NHibernate的能容易地操作ADO.NET和NHibernate的混合在同一事务。 NHibernate的1.0用户将受益于易于使用的API来执行数据访问操作。Spring.Net模块介

6、绍Spring.Web使用此模块,以抽象方式编写ASP.NET Web应用程序时允许你有效地解决共同的棘手问题,如在ASP.NET数据绑定,验证和ASP.NET母板页、控件、模块、驱动配置。Spring.Web.Extensions 使用此模块,可以轻松公开一个平原。NET对象(PONO),这是一个没有任何属性或特殊基类作为Web Service,通过依赖注入配置,应用AOP,并暴露在客户端的JavaScript。Spring.Services - 使用此模块,以适应平原。使他们能够与特定的分布式通信技术等。NET Remoting的,企业服务,ASMX Web Service,和WCF服务,

7、使用NET对象。这些服务可以通过依赖注入配置和应用AOP。Spring.Net模块介绍Spring.Testing.NUnit - 使用此模块进行整合NUnit的测试。Spring.Messaging - 使用此模块,以提您高效的创建Microsoft消息队列(MSMQ)应用程序坚实基础的最佳做法。Spring.Scheduling.Quartz - 提供与Quartz.NET工作提供Quartz jobs,调度声明配置调度一体化,触发器以及一些方便的类以提高生产率在建立工作调度应用。为何要使用Spring.Net框架IOC理论的背景及概念IOC为我们带来了什么好处IOC容器的一些产品使用IO

8、C框架应该注意什么第二部分IOC理论的背景我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑。齿轮组中齿轮之间的啮合关系,与软件系统中对象之间的耦合关系非常相似。 IOC理论的背景及概念伴随着工业级应用的规模越来越庞大,对象之间的依赖关系也越来越复杂,经常会出现对象之间的多重依赖性关系。架构师和设计师对于系统的分析和设计,将面临更大的挑战!对象之间耦合度过高的系统,必然会出现牵一发而动全身的情形!IOC理论的背景及概念如何降低系统之间、模块之间和对象之间的耦合度,是软件工程永远追求的目标之一。为了解决对象之间的耦合

9、度过高的问题,软件专家Michael Mattson提出了IOC理论,用来实现对象之间的“解耦” 最热门的IOC框架技术Spring应运而生。IOC理论的背景及概念IOC是Inversion of Control(控制反转)的缩写。简单来说就是把复杂系统分解成相互合作的对象,这些对象类通过封装以后,内部实现对外部是透明的,从而降低了解决问题的复杂度,而且可以灵活地被重用和扩展。借助于“第三方”实现具有依赖关系的对象之间的解耦。全部对象的控制权全部上缴给“第三方”IOC容器!IOC理论的背景及概念IOC容器成了整个系统的关键核心,它起到了一种类似“粘合剂”的作用,把系统中的所有对象粘合在一起发挥

10、作用,如果没有这个“粘合剂”,对象与对象之间会彼此失去联系,这就是有人把IOC容器比喻成“粘合剂”的由来。这时候,A、B、C、D这4个对象之间已经没有了耦合关系,彼此毫无联系,这样的话,当你在实现A的时候,根本无须再去考虑B、C和D了,对象之间的依赖关系已经降低到了最低程度。IOC理论的背景及概念IOC的别名:依赖注入(DI)所谓依赖注入,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。 依赖注入(DI)和控制反转(IOC)是从不同的角度的描述的同一件事情,就是指通过引入IOC容器,利用依赖关系注入的方式,实现对象之间的解耦。IOC理论的背景及概念对象A依赖于对象B,当对象 A

11、需要用到对象B的时候,IOC容器就会立即创建一个对象B送给对象A。IOC容器就是一个对象制造工厂,你需要什么,它会给你送去,你直接使用就行了,而再也不用去关心你所用的东西是如何制成的,也不用关心最后是怎么被销毁的,这一切全部由IOC容器包办。当电脑主机读取文件的时候,我就把它所要依赖的外部设备,帮他挂接上。整个外部设备注入的过程和一个被依赖的对象在系统运行时被注入另外一个对象内部的过程完全一样。依赖注入(DI)IOC为我们带来了什么好处第一、USB设备作为电脑主机的外部设备,在插入主机之前,与电脑主机没有任何的关系,只有被我们连接在一起之后,两者才发生联系,具有相关性。第二、USB设备和电脑主

12、机的之间无关性,还带来了另外一个好处,生产USB设备的厂商和生产电脑主机的厂商完全可以是互不相干的人,各干各事,他们之间唯一需要遵守的就是USB接口标准。以USB设备为例IOC为我们带来了什么好处第三、同一个USB外部设备可以插接到任何支持USB的设备,可以插接到电脑主机,也可以插接到DV机,USB外部设备可以被反复利用。第四、同USB外部设备一样,模块具有热插拔特性。IOC容器的一些产品Sun ONE技术体系下的IOC容器有:轻量级的有Spring、Guice、Pico Container、Avalon、HiveMind;重量级的有EJB;不轻不重的有JBoss,Jdon等等。Spring框

13、架作为Java开发中SSH(Struts、Spring、Hibernate)三剑客之一,大中小项目中都有使用,非常成熟,应用广泛,EJB在关键性的工业级项目中也被使用,比如某些电信业务。.Net技术体系下的IOC容器有:Spring.Net、Castle等等。Spring.Net是从Java的Spring移植过来的IOC容器,Castle的IOC容器就是Windsor部分。它们均是轻量级的框架,比较成熟,其中Spring.Net已经被逐渐应用于各种项目中。使用IOC框架应该注意什么第一、软件系统中由于引入了第三方IOC容器,生成对象的步骤变得有些复杂,本来是两者之间的事情,又凭空多出一道手续,

14、所以,我们在刚开始使用IOC框架的时候,会感觉系统变得不太直观。所以,引入了一个全新的框架,就会增加团队成员学习和认识的培训成本,并且在以后的运行维护中,还得让新加入者具备同样的知识体系。第二、由于IOC容器生成对象是通过反射方式,在运行效率上有一定的损耗。如果你要追求运行效率的话,就必须对此进行权衡。使用IOC框架应该注意什么第三、具体到IOC框架产品(比如:Spring)来讲,需要进行大量的配制工作,比较繁琐,对于一些小的项目而言,客观上也可能加大一些工作成本。第四、IOC框架产品本身的成熟度需要进行评估,如果引入一个不成熟的IOC框架产品,那么会影响到整个项目,所以这也是一个隐性的风险。

15、IOC控制反转AOP切面编程Transaction事务管理第三部分Spring.Net各功能的探讨IOC控制反转控制反转(Inversion of Control,英文缩写为IOC),也叫依赖注入(Dependency Injection)。我个人认为控制反转的意思是依赖对象(控制权)发生转变,由最初的类本身来管理依赖对象转变为IOC框架来管理这些对象,使得依赖脱离类本身的控制,从而实现松耦合。AOP切面编程面向切面编程 (也叫面向方面):Aspect Oriented Programming(AOP),是目前软件开发中的一个热点,也是Spring框架中的一个重要内容。利用AOP可以对业务逻辑

16、的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。AOP切面编程将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。 可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。AOP实际是GOF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。AOP切面编程我们编写程序时,首先思考要对程序中哪些方法进行拦截,拦截

17、到这些方法后又要做哪些业务处理。这些关注过程,我们称之为:横切性关注点。由“横切性关注点”引申出以下概念:Aspect(切面):指横切性关注点的抽象即为切面,它与类相似,只是两者的关注点不一样,类是对物体特征的抽象,而切面是横切性关注点的抽象。程序里的切面就是AroundAdvise类的实现部分。joinpoint(连接点):所谓连接点是指那些被拦截到的点。在Spring.NET中,连接点指的是方法,因为Spring.NET只支持方法类型的连接点,实际上joinpoint(连接点)还可以是字段或类构造器。程序里的连接点就是拦截到的方法,如OrderService类的Save方法。AOP切面编程

18、Pointcut(切入点):所谓切入点是指我们要对那些joinpoint(连接点)进行拦截的定义。程序里没有使用invocation.Method来判断拦截哪些方式,而Pointcut(切入点)就是对所有方法进行拦截。Advice(通知):所谓通知是指拦截到joinpoint(连接点)之后所要做的事情就是通知.通知分为前置通知,后置通知,异常通知,环绕通知。AroundAdvise继承AopAlliance.Intercept.IMethodInterceptor 接口,程序里使用的是环绕通知。Target(目标对象):代理的目标对象。程序里的目标对象就是OrderService类,我们通过P

19、roxyFactory factory = new ProxyFactory(new OrderService() UserName = admin );这句代码确定了目标对象是OrderService。AOP切面编程AOP代理(AOP proxy):由AOP框架在将通知应用于目标对象后创建的对象。程序里通过GetProxy()方法创建出的代理对象。Weave(织入):指将切面(aspect)应用到目标对象(target)对象并导致代理(proxy)对象创建的过程称为织入。正如程序里所应用的,OrderService类不具备判断权限的功能,我们将判断权限的功能SecurityService类的

20、IsPass方法应用到目标对象的过程。Introduction(引入):在不修改类代码的前提下,Introduction(引入):可以在运行期为类动态地添加一些方法或字段。程序里在没有修改OrderService类,而是在运行期把判断权限的功能通过ProxyFactory的AddAdvice方法动态的增加进去。AOP切面编程Spring.NET的四种通知类型:一、拦截环绕通知(around advice):Spring.NET中最基本的通知类型是拦截环绕通知(interception around advice),即方法拦截器。拦截环绕通知继承IMethodInterceptor接口。注意其中

21、IMethodInvocation.Proceed()方法的调用。该方法会依次调用拦截器链上的其它拦截器。大部分拦截器都需要调用这个方法并返回它的返回值。当然,也可以不调用Proceed方法,而返回一个其它值或抛出一个异常,但一般不太会这么做。二、前置通知(before advise):是在IMethodInterceptor.Proceed()方法调用前的通知。继承自IMethodBeforeAdvice接口。AOP切面编程三、异常通知(throws advise):是在IMethodInterceptor.Proceed()方法调用时发生异常的通知。继承自IthrowsAdvice接口。IthrowsAdvice接口没有定义任何方法:它是一个标识接口(按:之所以用标识接口,原因有二:1、在通知方法中,只有最后一个参数是必须的。如果声明为接口的方法,参数列表就被固定了。2、如果第一个原因可以用重载的接口方法解决,那么这个原因就是使用标识接口的充分原因了:实现此接口的类必须声明一或多个通知方法,接口方法做不到这一点),

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论