信息系统软件设计:第4章 Spring业务逻辑层技术_第1页
信息系统软件设计:第4章 Spring业务逻辑层技术_第2页
信息系统软件设计:第4章 Spring业务逻辑层技术_第3页
信息系统软件设计:第4章 Spring业务逻辑层技术_第4页
信息系统软件设计:第4章 Spring业务逻辑层技术_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

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

文档简介

1、第四章 Spring2.0业务逻辑层技术教学内容 Spring 简介 有关知识补充 Spring 框架 Spring 配置文件34.1 Spring简介概述Spring是一个开源框架,是为了解决企业应用开发的复杂性而创建的。 目的:解决企业应用开发的复杂性。功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能 。范围:任何Java应用 。简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。 44.1 Spring简介概述轻量从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且S

2、pring所需的处理开销也是微不足道的。非侵入 在应用中,一般不需要引用springjar包里的类。控制反转Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,某一接口的具体实现类的选择控制权从调用类中移除,转交给第三方裁决。 面向切面Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务()管理)进行内聚性的开发。应用对象只实现它们应该做的完成业务逻辑仅此而已。它们并不负责其它的系统级关注点,例如日志或事务支持。 54.1 Spring简介容器Spring即是一个容器又是一个框架。容器Spring包含并管

3、理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建基于一个可配置原型(prototype),bean可以创建一个单独的实例或者每次需要时都生成一个新的实例以及它们是如何相互关联的。 框架Spring提供了很多基础的与业务逻辑无关的功能,比如:事务管理、持久化框架集成等等,使用Spring框架,开发人员可以专注于业务逻辑开发,这个意义上讲它是一个框架。 4.1 Spring简介容器借助于Spring,各种Java EE技术和服务的使用得到了大大简化,因为POJO (普通Java对象,与编程模式无关)编程模型被Spring引入到Java EE的应用开发中。为

4、了使POJO编程模型在Spring框架中可用,Spring引入了Spring DI容器和Spring AOP实现技术,它们在倡导POJO编程模型方面的功劳是最大的 。4.1 Spring简介容器Spring 提供的控制反转(DI)容器能够管理POJO及各种Java组件。DI负责POJO的管理,比如为它提供事务服务、生命周期服务、线程服务、缓存服务和安全性服务等。与此同时,AOP技术使得应用程序能够透明地享受到Java EE容器提供的企业级的服务(如JMX、JCA CCI和JMS) 。Spring DI容器针对各种DAO层集成技术(如Hibernate、JPA和JDBC)、Java EE服务及技

5、术提供了一流的集成支持。 4.1 Spring简介框架 Spring框架是连接Struts与Hibernate的桥梁,同时它很好地处理了业务逻辑。 Spring框架提供的控制反转和面向方面编程、插件式架构降低了应用程序之间的依赖性。借助于XML定义文件,开发者能够在程序运行时连接不同的组件。Spring基本概念IoC Inverse of ControlDI Dependence InjectionAOP面向接口面向抽象核心容器核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory(ApplicationContext).BeanFactory 使用控制反转

6、(IoC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开4.1 Spring简介概念4.2.1 POJO类补充POJO,简单的Java对象(Plain Ordinary Java Objects)实际就是普通JavaBeans,使用POJO名称是为了避免和EJB混淆起来, 而且简称比较直接. 其中有一些属性及其getter setter方法的类。Entity Bean(实体Bean)是持久数据组件,代表存储在外部介质中的持久(Persistence)对象或者已有的企业应用系统资源。简单地讲,一个Entity Bean可以代表数据库中的一行记录,多个客户端应用能够以共享方式访问表示该

7、数据库记录的Entity Bean。4.2.2 工厂模式知识补充在面向对象的编程中,工厂模式是一种经常被使用到的模式。工厂模式就是专门负责将大量有共同接口的类实例化,而且不必事先知道每次是要实例化哪一个类的模式。4.2.2 工厂模式知识补充X-PersonXy-ChineseXz-American工厂类-PersonFactory4.2.2 工厂模式知识补充返回的究竟是Xy还是Xz的实例并不重要,因为它们有相同的方法,只不过这些方法的内部实现不同罢了。 public static void main(String args) PersonFactory pf = new PersonFacto

8、ry(); Person p = null; p = pf.getPerson(Chinese); System.out.println(p.sayGoodBye(jack); System.out.println(p.sayHello(jack);4.2.2 工厂模式知识补充ApplicationContext context = new FileSystemXmlApplicationContext(src/org/test/applicationContext.xml); Person p = (Chese)context.getBean(chese); System.out.print

9、ln(p.sayGoodBye(rose); System.out.println(p.sayHello(rose); 4.3 Spring 框架组成Spring框架组成控制反转IoC (依赖注入DI)面向方面(AOP) 4.3 Spring 框架组成Spring是一个分层框架,由若干定义好的模块组成如下图所示。 Spring2.0所有模块定义在核心容器之上,核心容器定义了创建、配置和管理bean的方式。Spring2.5的模块Spring2.5内核(IoC容器)AOP技术实现Spring AOPAspectJ5 无缝集成DAOSpring JDBC集成事务管理ORMHibernate JPA

10、TopLinkiBATSJava EE 服务及技术JMXJMSEJB3.0组件技术邮件服务远程服务脚本技术集成线程池、任务调度支持WebSpring Web MVCWeb框架集StrutsWebworkTypestryJSF富视图支持VelocityFreeMakerPDFJsper ReportsExcelSpring Portlet MVC 4.3 Spring 框架在IoC容器、 AOP技术实现的基础上,存在各式各样的DAO层集成技术、Java EE服务及技术、Web层支持。4.3.1 Spring 控制反转(IoC)控制反转IoC (Inversion of Control)是Spri

11、ng中最核心最重要的概念。借助于IoC ,实现“面向接口编程,而不是面向实现编程”。4.3.1 Spring 控制反转(IoC)IoC模式,即由容器控制程序之间的依赖关系,而不是由程序代码直接控制,控制权的转移就是反转。依赖关系 意指类之间的访问关系。 如果类A访问类B的属性或方法,或者类A实例化类B,则称类A依赖于类B。4.3.1 Spring 控制反转(IoC)IoC设计模式将创建对象实例的任务交给IoC容器,应用代码只需直接使用实例。实现了IoC模式的框架叫IoC容器。 IoC的另一个名字叫依赖注入(dependency Injection)- 组件之间的依赖关系由容器在运行时决定,形象

12、地讲,就是由容器动态地将某种依赖关系注入到组件中。4.3.1 Spring 控制反转(IoC)依赖注入(Dependency Injection)和控制反转(Inversion of Control)是同一个概念。具体含义是:当某个对象(可能是一个Java实例,调用者)需要另一个对象(另一个Java实例,被调用者)的协助时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring里,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者实例的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入。4.3.1 Spring 控制反转(IoC)IOC特

13、点4.3.1 Spring 控制反转(IoC)IoC的优点:不必关心组件的创建不必管理组件的生命周期 组件容易共享 测试非常容易4.3.1 Spring 控制反转(IoC)Spring提供的两个IoC容器(BeanFactory和ApplicationContext)(见工厂模式知识补充)BeanFactory主要适用于环境、内容受限的场合,如在Applet环境中, BeanFactory是最基础的IoC容器,它提供了配置框架和基础功能。ApplicationContext继承于BeanFactory,更适合于企业级的应用开发,重点讨论。4.3.1 Spring 控制反转(IoC)BeanFa

14、ctory 可将IoC容器比做食品加工厂。在提供源材料(POJO类)后,经过加工工艺和设备(Spring IoC和Spring AOP)处理后,顾客得到满意的食品(受管POJO,可能装备了事务、安全等功能)。4.3.1 Spring 控制反转(IoC)IoC原理默认时,配置的POJO都是单例的,即整个IoC容器仅有一个对应的POJO实例,而不是每次调用时产生一个实例(原型的)。在初始化BeanFactory实例factory后,IoC容器并不预先实例化在配置文件中声明的POJO实例。只是在应用程序调用对应的POJO时,Spring 才会实例化用到的受管POJO。4.3.1 Spring 控制反

15、转(IoC)IoC原理Spring支持三种主流的IoC注入类型设值( setter)注入、购造器注入和方法注入。设值注入 指通过调用无参构造器实例化受管POJO后,调用 setter方法设置对象间的依赖关系。构造器注入 往构造器传入若干参数完成依赖注入,传入的参数都是受管POJO依赖的对象。4.3.1 Spring 控制反转(IoC)ApplicationContext IoC容器 建立在BeanFactory基础之上,对企业级应用开发提供了更多支持,增加了国际化消息(i18n)支持、事件传送(发送和消费事件)支持、访问低层资源(.URL和java.io.File)、IoC容器分层(面向架构分

16、层)等。4.3.1 Spring 控制反转(IoC)ApplicationContext Spring IoC为ApplicationContext提供了许多实现类,ClassPathXmlApplicationContext和 FileSystemXmlApplicationContext使用最为频繁。4.3.1 Spring 控制反转(IoC)IoC在web应用中的原理 在web应用中,Spring会使用ApplicationContext的XmlApplicationContext来完成容器的创建工作。与BeanFactory不同的是:在构建ApplicationContext( IoC

17、 容器)过程中, Spring会自动实例化XML中定义的各个单例。4.3.1 Spring 控制反转(IoC)加载IoC容器到Web应用中IoC容器也是对象,需要实例化、提供方式使DI与应用程序能交互、不使用时销毁它。Spring提供contextLoaderListener和ContextLoaderservlet辅助类解决以上问题。对于支持Servletcontextlistener的web容器,开发者只需在web.xml中配置上下文参数即可。4.3.1 Spring 控制反转(IoC)Spring 的web.xml配置 Spring的MVC框架是一个请求驱动的Web框架,其设计围绕一个中

18、心的Servlet进行,它能将请求分发给控制器,并提供其他功能帮助Web应用开发。 基于Struts+Spring+Hibernate的联合应用中,接收请求的Servlet是由Struts的ActionServlet来配置的,因此不使用DispatcherServlet来接收请求了。而是在web.xml中配置一个监听器,并通过加载Spring配置。如下所示: contextconfigLocation /WEB-INF/applicationContextcon.xml 注意:contextConfigLocation参数名称是系统默认解析的参数,不能换成任意别的名称,否则系统将加载默认路径/

19、WEB-INF/applicationContext.xml文件,如果找不到,就会报错。4.3.1 Spring 控制反转(IoC) org.springframework.web.context.ContextLoaderListener 4.3.1 Spring 控制反转(IoC)一个例子:一个人需要一把斧子.模型: 调用者: 人被调用者:斧子4.3.1 依赖注入例子三种方式实现:一 原始社会:调用者自己创建被调用者二 工业社会:调用者向工厂要被调用者三 服务型社会:被调用者主动送上门4.3.1 依赖注入例子4.3.1 依赖注入例子两种方法注入 构造方法注入 设置属性注入4.3.1 依赖注

20、入例子设值注入:指通过setter方法传入被调用者的实例。public class Chinese implements Person private Axe axe; public Axe getAxe() return axe; public void setAxe(Axe axe) this.axe = axe; public void useAxe() axe.chop(); 设置注入 4.3.1 依赖注入例子4.3.1 依赖注入例子构造注入:指通过构造函数来完成依赖关系的设定,而不是通过setter方法。public class American implements Person

21、private Axe axe; public American(Axe axe) this.axe = axe; public void useAxe() axe.chop(); 构造注入 4.3.1 依赖注入例子4.3.1 依赖注入例子两种注入方式比较: 设值注入优点:设值注入与传统的JavaBean的写法更相似,所以更直观,自然。对于复杂的依赖关系,采用构造注入,会导致构造器过于臃肿,难以阅读在某些属性可选的情况下,多参数的构造器更加笨重4.3.1 依赖注入例子两种注入方式比较: 构造注入优点: 可以在构造器中决定依赖关系的注入顺序对于依赖关系无需变化的bean,构造注入更有用处依赖关系

22、只能在构造器中设定,组件内部的依赖关系完全透明,更符合高内聚的原则4.3.2面向方面编程(AOP)主要内容AOP概述AOP的基本概念Spring中的AOP4.3.2.1 AOP概述OOP(Object-Oriented Programming,又称面向对象编程)。OOP更多的关注系统的垂直切面关注的问题,而对系统的横切面比如:日志、安全性、事务管理等关注很少,或者说很难关注。AOP : 面向切面编程(Aspect-Oriented Programming),是OOP的延续。AOP 将分布在各个类中具有相同功能的代码片段整合到一起,由单独的功能模块完成,不仅减少了代码的重复量,降低了耦合,也提高

23、了代码的可维护性。 不要认为AOP会取代OOP,它只是OOP的补充。4.3.2.1 AOP概述AOP的作用就是在可以顺序执行的程序中,插入某些特殊的逻辑来实现一些特殊的功能 ,例如日志、事务、安全等都可以很方便的使用AOP来实现。采用AOP之前采用AOP之后4.3.2.1 AOP概述关注点分类 使用“横切”技术,AOP把软件系统分为两个部分: 核心关注点主要关注系统的业务逻辑;横切关注点主要关注系统级的服务,供业务逻辑使用。关注点核心关注点横切关注点4.3.2.1 AOP概述现实状态业务逻辑中,到处都涉及横切关注点。因此对各个已经实现的模块(业务逻辑)而言,都有大量的横切关注点实现。新的方案业

24、务逻辑用OO技术实现;横切关注点用AOP技术实现。横切关注点是系统级服务,对大部分应用是常见的,容易抽象出来,并加以实现。4.3.2.1 AOP概述实现AOP的总体模式OO技术将应用中的核心关注点分解成由层次(继承)结构组成的领域对象集合。AOP将应用中的横切关注点分解成由切面(Aspect)组成的生态子系统。它们被分别实现,互为补充,使得应用的开发变得简单、可维护性得到增强。4.3.2.2 AOP的基本概念各种AOP实现切面的技术、框架、机制、手段可能不同,但是AOP技术的基本概念是相同的。包括以下个术语连接点(join point)、切入点(cutpoint)、 装备(advice)、引入

25、(introduction)、 目标对象(target object)、织入(weaving) 切面(Aspect)。4.3.2.2 AOP的基本概念连接点(Joinpoint)连接点是程序执行中的一个精确执行点,如执行到某个方法、访问到某个成员变量、抛出某异常、装载某个类。通常用连接点的强弱来衡量AOP实现的强弱。实现连接点的方法有很多,Spring AOP仅支持方法级连接点。也就是说,只有在方法执行时才能加AOP。它是一个抽象的概念,在实现AOP时,并不需要去定义一个join point。4.3.2.2 AOP的基本概念切入点(point cut)通过切入点能够声明、集结连接点。在AOP中

26、,可以定义一个point cut,来捕获相关方法的调用。通常装备与切入点关联在一起,一旦某连接点被触发,则会立即执行相应的装备。开发者借助于point cut表达语言来完成point cut的指定工作。4.3.2.2 AOP的基本概念装备(Advice)装备指切面(aspect)在特定连接点所采取的动作。特定连接点由切入点(point cut)指定。主要的装备类型包括:Before、 AfterReturning、AfterThrowing、 After 、Around。 Before装备能够在特定连接点被触发前执行,其它类似。4.3.2.2 AOP的基本概念引入(introducion)引入

27、也称为inter-type声明(AspectJ6)。将新的接口、方法、成员变量动态引入到目标类、接口或切面中。不改变一个现有类代码的情况下,为该类添加属性和方法简单讲为对象引入附加的方法或属性,从而达到修改对象结构的目的。有的AOP工具又将其称为mixin。目标对象(target Object)被若干切面(aspect)装配过的对象,也被称为被装备的对象。4.3.2.2 AOP的基本概念织入(weaving)将切面与目标对象组装在一起的过程称为织入。通过织入创建一个被装备的对象。织入时机有编译期、装载期、运行期。不同的AOP实现支持不同织入时机。Sring AOP 支持运行期织入。把切面加入程序代码的过程。4.3.2.2 AOP的基本概念切面(aspect)与OOP中对象的

温馨提示

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

评论

0/150

提交评论