第五章 轻量级框架Spring.ppt_第1页
第五章 轻量级框架Spring.ppt_第2页
第五章 轻量级框架Spring.ppt_第3页
第五章 轻量级框架Spring.ppt_第4页
第五章 轻量级框架Spring.ppt_第5页
已阅读5页,还剩18页未读, 继续免费阅读

下载本文档

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

文档简介

1、第五章 轻量级框架Spring,本章目录,Spring基础 Spring的AOP Spring集成其他框架 Spring事务管理与任务调度,5.1 Spring基础,Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。它基于依赖注入和面向方面技术,大大地降低了应用开发的难度与复杂度,提高了开发的速度,为企业级应用提供了一个有效的轻量级的解决方案。 Spring主要专注于如何利用类、对象和服务去组成一个企业级应用,通过规范的方式,将各种不同的组件整合成一个完整的系统。Spring中使用了很多被实践证明的最佳实践和设计模式。它基于依赖注入和面向方面技术,大大地降低了应用开发的难

2、度与复杂度,提高了开发的速度,为企业级应用提供了一个有效的轻量级解决方案。,Spring 框架是一个分层架构,由7个模块组成,5.1 Spring基础,Spring控制反转IoC IoC(Inversion of Control,控制反转),直观地讲,就是容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在。控制权由应用代码中转到了外部容器,控制权的转移是所谓反转。IoC还有另外一个名字DI(Dependency Injection,依赖注入)。所谓依赖注入,就是由容器动态地将组件所依赖的对象注入到组件中,组件之间的依赖关系由容器在运行期间决定。,5.

3、1 Spring基础,Bean的配置与Bean Factory 在Spring中,Bean就是由Spring容器初始化、装配及管理的对象。Spring中的Bean对象要通过配置元数据来描述,一般是放在WEB-INF下的applicationContext.xml文件。 Bean的配置 Bean Factory Bean Factory是实例化、配置和管理众多Bean的容器。 一个Bean Factory可以用接口 org.springframework.beans.factory.BeanFactory表示,它是Spring IoC容器的核心接口。其基本的实现是org.spnngframewo

4、rk.beans.factory.xml.XmlBeanFactory。这个类用XML方式描述应用对象以及对象间的依赖关系。,5.1 Spring基础,案例5-1 在书城项目中使用Spring 在项目中引入Spring 通用配置 contextConfigLocation /WEB-INF/applicationContext.xml org.springframework.web.context.ContextLoaderListener ,在Spring配置文件中配置Bean 从Spring容器中获取对象 WebApplicationContext wac = WebApplication

5、ContextUtils.getRequiredW ebApplicationContext(this.pageContext.getServletContext(); IBsCategoryService bsCategoryService = (IBsCategoryService) wac.getBean(bsCategoryService); 在Service中采用自动注入的方式注入Dao Autowired private IBsCustomerDao bsCustomerDao;,5.2 Spring的AOP,AOP的概念 对于一个应用来说,关注点大体可以分为两类:核心关注点和横切

6、关注点。核心关注点主要关注系统的业务逻辑;横切关注点主要关注系统级服务,如日志、事务、安全性、调试、异常处理等。对于业务逻辑关注点,使用OO技术能够很好实现。对于横切关注点,可以使用AOP(Aspect Oriant Programming,面向方面编程)技术来实现。面向方面编程(AOP)通过提供另外一种思考程序结构的途经来弥补面向对象编程(OOP)的不足。Spring的AOP是建立在Java动态代理的基础上的。通过动态代理,可以将跨越多个类的代码分离出来,以解决系统级代码的模块化问题。,下面是AOP中的一些主要概念: 方面(Aspect) 一个关注点的模块化,这个关注点可能会横切多个对象。例

7、如事务处理和权限检查,都是在执行某些方法时需要特别执行的公共代码,这些公共代码或方法就是所谓的方面(Aspect),它是一组特定的功能集合。 连接点(Joinpoint) 程序执行过程中的某个特定的点,比如某方法调用、特定异常被抛出。在Spring AOP中,一个连接点总是表示一个方法的执行。 通知(Advice) 在某个特定的连接点上执行的动作。其中包括了arround(环绕)、before(前置)和after(后置)等不同类型的通知。 切入点(Pointcut) 匹配连接点的断言,它表明在什么样的连接点执行通知,可以看成是一组预注入通知的连接点集合。通知和一个切入点表达式关联,并在满足这个

8、切入点的连接点上运行(例如,当执行某个特定名称的方法时)。 顾问(Advisor) Advisor是Pointcut和Advice的配置器,它包括Pointcut和Advice,是将Advice注入程序中Pointcut位置的代码。,5.2 Spring的AOP,使用Spring中的AOP 1定义通知 按通知的类型不同,需要实现不同的接口。环绕通知需要实现MethodInterceptor接口,前置通知需要实现接口MethodBeforeAdvice接口,后置通知需要实现AfterReturningAdvice接口,异常通知需要实现ThrowsAdvice接口。 2配置代理 3使用切入点 4使

9、用高级的切入点顾问 5使用动态代理,5.2 Spring的AOP,基于XML Schema和Annotation的Spring AOP配置 除上述配置方法外,Spring2.0以后的版本引入了基于XML Schema和Annotation(标注)的Spring AOP配置,这样使得AOP的配置更加简单。 采用这种方式,通知的定义有所不同,所定义的类不用实现接口。以环绕通知为例,方法的参数类型是ProceedingJoinPoint,它是JoinPoint的子接口,允许控制何时执行,是否执行连接点。在环绕通知中可调用ProceedingJoinPoint的proceed()方法来回调被代理的方法

10、。,基于XML Schema的配置 基于标注(Annotation)的AOP配置方式 案例5-2 书城项目中的日志实现 (1)在书城的mon包下建立如下类 (2)在源包下建立的配置文件applicationContext-other.xml,5.3 Spring集成其他框架,Spring 提供了自己的 Web 框架(Spring MVC), 同时它也提供了与其它流行的Web框架整合的能力。这就允许开发人员充分利用已经掌握的技术,比如Struts框架,同时他也可以享受 Spring 提供的其他功能,例如数据访问,声明式事务处理,以及灵活的配置和方便的应用集成。,5.3 Spring集成其他框架,

11、Spring与Struts2集成 Spring和Sturts2集成时,Action的实例化由Spring的IoC来控制。要做到这一点,需设置Struts2属性。在perties文配置文件设置struts.objectFactory。 struts.objectFactory = spring 同时在web工程中还要引入Sturts2针对Spring发布的plugin插件包struts2-spring-plugin-.jar。 这样在,在Struts2的Action中,就可以采用自动注入的方式注入业务对象,例如: public class BsCustomerA

12、ction extends ActionSupport Autowired private IBsCustomerService bsCustomerService; ,5.3 Spring集成其他框架,Spring与JPA集成 使用JNDI获取EntityManagerFactory (1)配置持久性单元 (2)在web.xml配置持久化单元引用 (3)配置applicationContext-db.xml (4)Dao层的设计。Dao层的设计有两种方法 使用LocalContainerEntityManagerFactoryBean LocalContainerEntityManagerF

13、actoryBean提供了对JPA EntityManagerFactory的全面控制,非常适合那种需要细粒度定制的环境。LocalContainerEntityManagerFactoryBean 基于persistence.xml文件创建PersistenceUnitInfo,允许在应用程序中灵活进行本地配置。它支持连接现有JDBC数据源,支持本地事务(RESOURCE_LOCAL)和全局事务(JTA)。,5.3 Spring集成其他框架,SSHJ架构 所谓SSHJ架构,也就是Struts2+Spring+Hibernate JPA架构。 表现层利用Struts2来实现。借助于Struts

14、2的强大的功能,可以更方便地实现MVC模式,使视图和访问控制分离,模块结构更加清晰,处理用户请求的编码更加简化。同时,借助于Struts2也便于实现国际化,数据验证、文件上传等特殊功能。 数据访问层借助Hibernate JPA实现。Hibernate是比较成熟的ORM技术,利用Hibernate可以简化了数据库编程,容易从面向对象的角度设计程序。新的Dao设计模式,减少了业务层与底层数据库操作的耦合性。JPA的使用,使得ORM持久化技术更加规范。 Spring主要起到集成系统各组成部分的作用。它基于借助于IoS技术,提供了强大的Bean工厂容器,通过配置的方式描述对象及其依赖关系,降低了模块

15、间的依赖性,简化了程序设计。同时,Spring 提供的AOP,是对面向对象程序设计的重要补充,借助于AOP技术,可以方便地实现系统级的功能,如事务管理和日志处理等。通过Spring减低的了系统的复制性,使系统便于维护和扩充。,5.3 Spring集成其他框架,案例5-3 基于SSHJ架构的书城项目配置 applicationContext-db.xml和perties的最终配置,5.4 Spring事务管理与任务调度,Spring框架引人注目的重要因素之一是它全面的事务支持。Spring框架提供了一致的事务管理抽象,这带来了以下好处: 为复杂的事务API提供了一致的编程模式

16、。 支持声明式事务管理。 提供更易于使用的编程式事务管理API。 非常好地整合Spring的各种数据访问抽象。,5.4 Spring事务管理与任务调度,事务的基本配置 Spring提供了编程式和声明式两种事务管理方法,声明式事务管理的优势非常明显:声明式事务管理是通过AOP方法实现的,无需与具体的事务逻辑耦合,可以方便地在不同事务逻辑之间切换,是对应用代码影响最小的选择。这里只介绍声明式的事务管理。 按照AOP技术,Spring的配置可以有多种方法,但使用动态代理是最方便的,即使用DefaultAdvisorAutoProxyCreator自动创建事务代理。,5.4 Spring事务管理与任务

17、调度,事务的传播属性 PROPAGATION_REQUIRED 支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。 PROPAGATION_REQUIRES_NEW 新建事务,如果当前存在事务,把当前事务挂起。 PROPAGATION_SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行。 PROPAGATION_MANDATORY 支持当前事务,如果当前没有事务,就抛出异常。 PROPAGATION_NESTED 如果一个活动的事务存在,则运行在一个嵌套的事务中. 如果没有活动事务, 则按PROPAGATION_REQUIRED 属性执行。 PROPAGATI

18、ON_NOT_SUPPORTED 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 PROPAGATION_NEVER 以非事务方式执行,如果当前存在事务,则抛出异常。,5.4 Spring事务管理与任务调度,事务的隔离级别 ISOLATION_DEFAULT 使用数据库默认的事务隔离级别。 ISOLATION_READ_UNCOMMITTED 这是事务最低的隔离级别,它允许别外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读,不可重复读和幻读。 ISOLATION_READ_COMMITTED 保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据。这种事务隔离级别可以避免脏读出现,但是可能会出现不可重复读和幻读。 ISOLATION_REPEATABLE_READ 这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻读。它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读)。 ISOLA

温馨提示

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

评论

0/150

提交评论