版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Spring基础与应用第七章了解Spring框架概念及特征掌握Spring体系结构学习内容了解Spring相关API理解IoC容器、AOP功能熟练掌握Spring开发环境掌握SSH组合开发Spring概述1Spring3.X新特性2Spring快速入门
3IoC和AOP4目录CONTENTSSpring事务管理机制5Spring概述Spring简介Spring的特点1Spring体系结构Spring概述Spring简介Spring是一个轻量级(IoC)和面向切面(AOP)的窗口框架,它的基本组成:完善的轻量级核心构架,通用的事物管理抽象层,JDBC抽象层,灵活的MVCWeb应用框架,AOP功能,集成了Toplink、Hibernate、JDO等。Spring框架是基于Java平台的,为开发Java应用提供了全方位的基础设施支持,并且很好地处理了这些基础设施,所以开发者只需要关注应用本身即可。Spring可以使用POJO创建应用,并且可以将企业服务非侵入式地应用到POJO。这项功能适用于JavaSE编程模型以及全部或部分的JavaEE。Spring概述Spring简介目前Spring最新版本为Spring5.0,MyEclipse2014支持到Spring3.1。本章将主要介绍Spring3.x及Spring4.X。使用Spring框架要到Spring的官方网站下载Spring的软件包,Spring的官方网站是。Spring概述Spring的特点之前有很多开发者曾被过度EJB的宣传所迷惑。EJB的复杂源于它对所有企业应用采用统一的标准,它认为所有的企业应用都需要分布式对象、远程事务、因此造就了EJB架构的极度复杂。但EJB并非一无是处,它提供了很多可圈可点的服务,如声明事务、透明持久化等。Spring承认EJB中存在优秀的东西,只是它的实现太过于复杂,所以Spring在努力提供类似服务的同时尽量简化开发,Spring认为JavaEE的开发应该更容易、更简单。在实现这一目标时,Spring有以下优势:Spring概述Spring的特点方便解耦,简化开发。通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所导致的过度耦合问题。有了Spring,用户不必再为单实例模式类、属性文件解析等这些底层的需求编写代码,可以更专注于上层的应用。AOP编程的支持。通过Spring提供的AOP功能,方便进行面向切片的编程,许多不容易用OOP实现的功能可以通过AOP轻松应付。声明式事务的支持。在Spring中,我们可以从单调的事务管理代码中解脱出来,通过声明式方式灵活地进行事务管理,提高开发效率和质量。方便程序的测试。可以用非容器依赖的编程方式进行几乎所有的测试工作,在Spring中,测试不再是昂贵的操作,而是随手可做的事情。Spring概述Spring的特点Spring框架的特点主要有以下5个方面:轻量:从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB左右的JAR文件里发布。控制反转:Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其他对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。面向切面:Spring提供了面向切面编程的丰富支持,允许通过分离业务的应用逻辑与系统级服务(如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的,它们并不负责其他的系统级关注点,如日志或事务支持。容器:Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,开发人员可以配置每个Bean如何被创建。框架:Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等),将应用逻辑的开发留给开发人员。Spring概述Spring的特点以上Spring的这些特征使开发人员能够编写更干净、更可管理并且更易于测试的代码,它们也为Spring中的各种模块提供了基础支持。这样,作为开发人员可以从Spring获得以下好处。不用关心事务API就可以执行数据库事务;不用关心远程API就可以使用远程操作;不用关心JMXAPI就可以进行管理操作;不用关心JMSAPI就可以进行消息处理。Spring概述Spring体系结构Spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许用户选择使用哪一个组件,这也是Spring与Struts、Hibernate等其他框架不同的地方。Spring框架是一个分层架构,由7个定义良好的模块组成。Spring模块构建在核心容器之上,核心容器定义了创建、配置和管理bean的方式,如图所示。Spring概述Spring体系结构组成Spring框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。从整体看这几个主要模块几乎为企业应用提供了所需的一切,从持久层、业务层到展示层都拥有相应的支持。其中,IoC和AOP是Spring所依赖的根本。在此基础上,Spring整合了各种企业应用开源框架和许多优秀的第三方类库,成为Java企业应用full-stack的开发框架。Spring概述Spring体系结构核心容器:核心容器提供Spring框架的基本功能。核心容器的主要组件是BeanFactory,它是工厂模式的实现。BeanFactory使用控制反转(IOC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。Spring上下文:Spring上下文是一个配置文件,向Spring框架提供上下文信息。Spring上下文包括企业服务,例如JNDI、EJB、电子邮件、国际化、校验和调度功能。SpringAOP:通过配置管理特性,SpringAOP模块直接将面向方面的编程功能集成到了Spring框架中。所以,可以很容易地使Spring框架管理的任何对象支持AOP。SpringAOP模块为基于Spring的应用程序中的对象提供了事务管理服务。通过使用SpringAOP,不用依赖EJB组件,就可以将声明性事务管理集成到应用程序中。Spring概述Spring体系结构SpringDAO:JDBCDAO抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。SpringDAO的面向JDBC的异常遵从通用的DAO异常层次结构。SpringORM:Spring框架插入了若干个ORM框架,从而提供了ORM的对象关系工具,其中包括JDO、Hibernate和iBatisSQLMap。所有这些都遵从Spring的通用事务和DAO异常层次结构。SpringWeb模块:Web上下文模块建立在应用程序上下文模块之上,为基于Web的应用程序提供了上下文。所以,Spring框架支持与JakartaStruts的集成。Web模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。SpringMVC框架:MVC框架是一个全功能的构建Web应用程序的MVC实现。通过策略接口,MVC框架变成为高度可配置的,MVC容纳了大量视图技术,其中包括JSP、Velocity、Tiles、iText和POI。Spring3.X新特性核心API核心IoC配置核心2通用类型转换系统和属性格式化系统数据访问层新增OXM功能Web功能增强其它Spring3.X新特性核心API更新在Spring2.x中,其实我们已经可以看到这个趋势。当时Spring已经有很多类采用Java5.0的语言特点,不过它们被谨慎地放到一个单独的tiger包中。鉴于当前基本上所有的Java应用都已经采用Java5.0开发,Spring3顺应大势也将其核心API都更新到Java5.0上,方便开发者调用。这个更新的最大标志是将核心API采用泛型和不定入参的特性。如BeanFactory的部分方法签名已经调整成如下形式:TgetBean(Class<T>requiredType)TgetBean(Stringname,Class<T>requiredType)Map<String,T>getBeansOfType(Class<T>type)Spring3.X新特性核心API更新此外,Spring让TaskExecutor直接扩展java.util.concurrent.Executor的接口,在Spring2.x中TaskExecutor则是一个独立的接口。AsyncTaskExecutor扩展于TaskExecutor,支持在一段时间后异步调用某个方法。新增了一个用于类型转换的ConversionService接口,它是Spring3新增类型转换系统的核心接口,其提供的方法都支持泛型。Spring3使用类型转换系统替换掉原来标准JDK的JDKPropertyEditors。最后,Spring的事件监听器也支持泛型,形如ApplicationListener<EextendsApplicationEvent>。这样,只要指定事件的类型就可以监听某一类型的事件了。Spring3.X新特性IoC配置信息Spring拥有众多的子项目,Spring在升级时经常将那些熟悉的子项目整合到Spring主项目中。SpringJavaConfig是一个通过Java类提供Spring配置元信息的子项目,Spring3已经将其纳入到Spring框架的核心模块中。在早期版本中,Spring仅提供XML配置方式,在Spring2.5中提供了基于注解的配置方式,在Spring3中则提供了基于Java类的配置方式。这三种配置方式无非是形式上的区别,最终提供的都是Spring配置的元数据。Spring要提供这么多配置方式,并不是要用一种方式替换另一种方式,它们在不同的应用场景下将表现出各自的优势。所以可能会同时使用到这三种方式。Spring3.X新特性通用类型转换系统和属性格式化系统引入了一种通用的“类型转换系统”,Spring的SpELl目前使用该系统类型转换,也可以在Spring容器及DataBinder的Bean属性绑定时使用。在格式化Bean属性值时,引入了一套格式化的SPI接口,它比早期使用的JavaBeanPropertyEditors更为强大易用。Spring3.X新特性数据访问层新增OXM功能来自于SpringWebService项目的OXM已经被移到Spring核心框架中,OXM类似于我们之前学过的ORM,它通过元数据描述对象和XML转换的映射。它对应的包是org.springframework.oxm。Spring3.X新特性Web功能增强Spring3最令人振奋的一个增强是SpringMVC提供了对REST风格编码的支持。在服务器端提供了一些易用的REST注解,在调用端则提供了RestTemplate模板类,服务端和调用端都通过HttpConverter进行对象和Http请求/响应的转换。在Spring2.5中引入了一套SpringMVC的注解,如@Controller,@RequestMapping等,Spring3继续完善这一注解体系,新增了@CookieValue、@RequestHeaders的注解,可以直接绑定Cookie及请求报文头的数据。Spring3.X新特性其它声明式模式验证:Spring3对模型校验进行了很多增强。首先,它全面支持JSR-303的Bean验证API;其次,可以使用Spring的DataBinder对Bean进行校验;最后,SpringMVC支持声明式验证。对JavaEE6的支持:Spring3可以使用@Async或EJB3.1的@Asynchronous注解异步调用某个方法。此外,还支持JSR-303、JSF2.0及JPA2.0中的大部分功能。支持内嵌的数据库:提供便捷的方法支持内嵌数据库引擎,如HSQL、H2和Berby。Spring快速入门搭建Spring环境Spring内容组成3Spring快速入门搭建Spring环境可以手动安装Spring框架环境,也可以利用MyEclipse工具直接使用Spring框架。手动添加Spring将下载好的Spring包解压,新建项目并通过ConfigureBuildPath为这个项目添加Spring以下几个jar文件。org.springframework.core-3.0.1.RELEASE-A.jarorg.springframework.beans-3.0.1.RELEASE-A.jarorg.springframework.context-3.0.1.RELEASE-A.jar。org.springframework.context.support-3.0.1.RELEASE-A.jarorg.springframework.asm-3.0.1.RELEASE-A.jarorg.springframework.expression-3.0.1.RELEASE-A.jar另外还要添加Struts软件包里的:commons-logging-1.0.4.jar。找到applicationContext.xml文件并复制到项目src路径下。通过以上步骤完成Spring开发环境的配置。Spring快速入门搭建Spring环境使用MyEclipse自动添加SpringMyEclipse2014中自带了Spring包,最高支持Spring3.1版本,直接添加即可。开始选择添加Spring右击项目选择“MyEclipse->ProjectFacets-InstallSpringFacet”设置Spring运行环境然后一步步选择Spring版本信息JavaEE运行环境等选中“EnableAOPBuilder”配置Spring参数,生成Application.xml文件选择Spring包,最后点击“Finish”就完成Spring添加。Spring快速入门Spring内容组成Spring的主要组成部分如图所示:从下向上看spring的主要内容:核心容器:核心容器提供Spring框架的基本功能。核心容器的主要组件是BeanFactory,它是工厂模式的实现。BeanFactory使用控制反转(IOC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。Test:Spring支持Junit单元测试。核心容器(IOC):Bean(Bean工厂,创建对象)、Core(一切的基础)、Context(上下文)、SpEL(Spring的表达式语言);SpringAOP:通过配置管理特性,SpringAOP模块直接将面向方面的编程功能集成到了Spring框架中。所以,可以很容易地使Spring框架管理的任何对象支持AOP。SpringAOP模块为基于Spring的应用程序中的对象提供了事务管理服务。通过使用SpringAOP,不用依赖EJB组件,就可以将声明性事务管理集成到应用程序中。SpringWeb模块:Web上下文模块建立在应用程序上下文模块之上,为基于Web的应用程序提供了上下文。所以,Spring框架支持与JakartaStruts的集成。Web模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。Spring快速入门Spring内容组成SpringMVC框架:MVC框架是一个全功能的构建Web应用程序的MVC实现。通过策略接口,MVC框架变成为高度可配置的,MVC容纳了大量视图技术,其中包括JSP、Velocity、Tiles、iText和POI。SpringDAO:JDBCDAO抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。SpringDAO的面向JDBC的异常遵从通用的DAO异常层次结构。SpringORM:Spring框架插入了若干个ORM框架,从而提供了ORM的对象关系工具,其中包括JDO、Hibernate和iBatisSQLMap。所有这些都遵从Spring的通用事务和DAO异常层次结构。IoC和AOPIoC概述IoC和DI4依赖注入基本原理IoC装在机制AOP简介AOP实现
配置AOPIoC和AOPIoC概述IoC(控制反转:InverseofControl)是Spring容器的内核,AOP、声明式事务等功能在此基础上开花结果。但是IoC这个概念理解起来比较生涩难懂,不过IoC确实包含很多内涵,它设计代码解耦、设计模式、代码优化等问题的考量。IoC不是什么技术,而是一种设计思想。在Java开发中,IoC意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。理解好IoC的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”,那我们来深入分析一下:IoC和AOPIoC概述谁控制谁,控制什么:传统JavaSE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象,即由IoC容器来控制对象的创建;谁控制谁?当然是IoC容器控制了对象;控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)。为何是反转,哪些方面反转了:有反转就有正转,传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象;为何是反转?因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;哪些方面反转了?依赖对象的获取被反转了。IoC和AOPIoC概述如图所示,传统程序设计都是主动去创建相关对象然后再组合起来:当有了IoC/DI的容器后,在客户端中不再主动去创建这些对象了,如图所示。IoC和AOPIoC和DI首先想说说IoC。这是spring的核心,贯穿始终。对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。举个简单的例子,我们是如何找女朋友的?常见的情况是,我们到处去看哪里有长得漂亮身材又好的女孩,然后打听她们的兴趣爱好、qq号、电话号、ip号等等,想办法认识她们,投其所好送其所要。这个过程是复杂深奥的,我们必须自己设计和面对每个环节。传统的程序开发也是如此,在一个对象中,如果要使用另外的对象,就必须得到它(自己new一个,或者从JNDI中查询一个),使用完之后还要将对象资源释放掉,对象始终会和其他的接口或类藕合起来。IoC和AOPIoC和DI那么IoC是如何做的呢?有点像通过婚介找女朋友,在我和女朋友之间引入了一个第三者:婚姻介绍所。婚介管理了很多资料,我可以向婚介提出一个列表,告诉它我想找个什么样的女朋友,然后婚介就会按照我们的要求提供一个,我们只需要去和她谈恋爱、结婚就行了。简单明了,如果婚介给我们的人选不符合要求,我们就会抛出异常。整个过程不再由我自己控制,而是由婚介这样一个类似容器的机构来控制。Spring所倡导的开发方式就是如此,所有的类都会在spring容器中登记,告诉spring你是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由
spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。IoC和AOPIoC和DIIoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(DependencyInjection,依赖注入)来实现的。比如对象A需要操作数据库,以前我们总是要在A中自己编写代码来获得一个Connection对象,有了
spring我们就只需要告诉spring,A中需要一个Connection,至于这个Connection怎么构造,何时构造,A不需要知道。在系统运行时,spring会在适当的时候制造一个Connection,然后像打针一样,注射到A当中,这样就完成了对各个对象之间关系的控制。A需要依赖
Connection才能正常运行,而这个Connection是由spring注入到A中的,依赖注入的名字就这么来的。那么DI是如何实现的呢?
Java1.3之后一个重要特征是反射(reflection),它允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性,spring就是通过反射来实现注入的。理解了IoC和DI的概念后,一切都将变得简单明了,剩下的工作只是在spring的框架中堆积木而已。IoC和AOP依赖注入基本原理依赖注入和控制反转是对同一件事情的不同描述,从某个方面讲,就是它们描述的角度不同。依赖注入是从应用程序的角度在描述,可以把依赖注入描述完整点:应用程序依赖容器创建并注入它所需要的外部资源;而控制反转是从容器的角度在描述,描述完整点:容器控制应用程序,由容器反向的向应用程序注入应用程序所需要的外部资源。在SpringIoC中有三种实现依赖注入的形式,即接口注入、setter方法注入和构造方法注入。IoC和AOP依赖注入基本原理接口注入接口注入就是将要注入的内容转入到一个接口中,然后将其注入到它的实现类中,因为实现一个接口必须实现接口定义的所有方法。setter方法注入Setter方法注入指注入者通过setter方法将一个对象注入进去。此方法简单、直观,因而在Spring的依赖注入里大量使用。构造方法注入构造方法注入即是通过一个带参的构造函数将一个对象注入进去。IoC和AOPIoC装载机制Spring可以用这样一个数学公式表示,即Spring=Beans+XML。在Spring中所有组件都会被认为是一个Bean,Bean是容器管理的一个基本单位。Setter方法注入和构造注入有时在做配置时比较麻烦。所以框架为了提高开发效率,提供自动装配功能,简化配置。Spring框架式默认不支持自动装配的,要想使用自动装配需要修改spring配置文件中<bean>标签的autowire属性(自动装配)。所谓自动装配,就是将一个Bean注入到其他Bean的Property中,类似于:<beanid=”customer”class=”fw.spring.Customer”autowire=”byName”/>IoC和AOPIoC装载机制Spring支持5种自动装配模式,如下:默认情况下,不自动装配,通过“ref”attribute手动设定。byName:根据Property的Name自动装配,如果一个bean的name,和另一个bean中的Property的name相同,则自动装配这个bean到Property中。byType:根据Property的数据类型(Type)自动装配,如果一个bean的数据类型,兼容另一个bean中Property的数据类型,则自动装配。constructor:根据构造函数参数的数据类型,进行byType模式的自动装配。autodetect:如果发现默认的构造函数,用constructor模式,否则,用byType模式。IoC和AOPIoC装载机制一般不推荐在大型项目中使用自动装配。如果一个Bean声明被标志为autowire,Bean工厂会自动将其他的受管对象与其要求的依赖关系进行匹配,从而完成对象的装配。当然只有当对象关系无歧义时才能完成自动装配。因为不需要明确指定某个协作对象,所以可以带来很多便利性。IoC中也可以用注解的方式实现Bean管理和依赖注入。注解实现Bean配置主要用来进行如依赖注入、生命周期回调方法定义等,不能消除XML文件中的Bean元数据定义,且基于XML配置中的依赖注入的数据将覆盖基于注解配置中的依赖注入的数据。用注解来向Spring容器注册Bean,需要在applicationContext.xml中注册:IoC和AOPIoC装载机制一般不推荐在大型项目中使用自动装配。如果一个Bean声明被标志为autowire,<context:component-scanbase-package=”pagkage1[,pagkage2,…,pagkageN]”/>。<context:component-scanbase-package="cn.gacl.java"/>表明cn.gacl.java包及其子包中。如果某个类的头上带有特定的注解【@Component/@Repository/@Service/@Controller】,就会将这个对象作为Bean注册进Spring容器。也可以在package=””中指定多个包,如:<context:component-scanbase-package=“cn.gacl.dao.impl,cn-gacl.service.impl,cn.gacl.action”/>IoC和AOPIoC装载机制一般不推荐在大型项目中使用自动装@Component@Component是所有受Spring
管理组件的通用形式,@Component注解可以放在类的头上,不推荐使用。@Controller@Controller对应表现层的Bean,也就是Action,例如:IoC和AOPIoC装载机制使用@Controller注解标识UserAction之后,就表示要把UserAction交给Spring容器管理,在Spring容器中会存在一个名字为"userAction"的action,这个名字是根据UserAction类名来取的。注意:如果@Controller不指定其value【@Controller】,则默认的bean名字为这个类的类名首字母小写,如果指定value【@Controller(value="UserAction")】或者【@Controller("UserAction")】,则使用value作为bean的名字。这里的UserAction还使用了@Scope注解,@Scope("prototype")表示将Action的范围声明为原型,可以利用容器的scope="prototype"来保证每一个请求有一个单独的Action来处理,避免struts中Action的线程安全问题。spring
默认scope
是单例模式(scope="singleton"),这样只会创建一个Action对象,每次访问都是同一Action对象,数据不安全,struts2
是要求每次次访问都对应不同的Action,scope="prototype"
可以保证当有请求的时候都创建一个Action对象。IoC和AOPIoC装载机制@Service@Service对应的是业务层Bean,例如:@Service("userService")注解是告诉Spring,当Spring要创建UserServiceImpl的的实例时,bean的名字必须叫做"userService",这样当Action需要使用UserServiceImpl的的实例时,就可以由Spring创建好的"userService",然后注入给Action:在Action只需要声明一个名字叫“userService”的变量来接收由Spring注入的"userService"即可,具体代码如下:IoC和AOPIoC装载机制@Repository@Repository对应数据访问层Bean,例如:@Repository(value="userDao")注解是告诉Spring,让Spring创建一个名字叫“userDao”的UserDaoImpl实例。当Service需要使用Spring创建的名字叫“userDao”的UserDaoImpl实例时,就可以使用@Resource(name="userDao")注解告诉Spring,Spring把创建好的userDao注入给Service即可。IoC和AOPIoC装载机制Spring支持以下4种类型的过滤方式:注解org.example.SomeAnnotation将所有用SomeAnnotation注解的类过滤出来类名指定org.example.SomeClass过滤指定的类正则表达式com.spring.annotation.web.*通过正则表达式过滤一些类AspectJ表达式org.example.*Service+通过AspectJ表达式过滤一些类IoC和AOPAOP简介AOP(AspectOrientedProgramming),也就是面向方面编程的技术。AOP基于IoC基础,是对OOP的有益补充。AOP将应用系统分为两部分,核心业务逻辑(Corebusinessconcerns)及横向的通用逻辑,也就是所谓的切面。使用AOP,你可以将处理Aspect的代码注入主程序,通常主程序的主要目的并不在于处理这些Aspect。AOP可以防止代码混乱。Spring作为一种非侵略性的、轻型的AOP框架,开发人员无需使用预编译器或其他的元标签,便可以在Java程序中使用它。AOP有一些重要概念需要理解,包括以下方面:IoC和AOPAOP简介连接点(Joinpoint):程序执行过程中明确的点。切入点(Pointcut):指定一个通知将被引发的一系列连接点的集合。增强(Advice):在特定的连接点,AOP框架执行的动作。目标对象(Target):包含连接点的对象,也被称作被增强或被代理对象。引入(Introduction):添加方法或字段到被增强的类。Spring允许引入新的接口到任何增强的对象。织入(Weaving):织入是将增强添加对目标类具体连接点上的过程。代理(Proxy):AOP框架创建的对象,包含增强。切面(Aspect):切面由切入点和增强组成。各种通知类型又包括:Around通知:环绕通知,包围一个连接点的通知。Before通知:在一个连接点之前执行的通知。Throws通知:在方法抛出异常时执行的通知。。Afterreturning通知:在连接点正常完成后执行的通知。Around通知是最通用的通知类型。IoC和AOPAOP简介Spring提供所有类型的通知,推荐使用最为合适的通知类型来实现需要的行为,使用最合适的通知类型使编程模型变得简单,并能减少潜在错误。切入点的概念是AOP的关键,它使AOP区别于其他使用拦截的技术,切入点使通知独立于OO的层次选定目标。使用“横切”技术,AOP把软件系统分为两个部分:核心关注点和横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处都基本相似。AOP的核心思想就是将应用程序中的商业逻辑同对其提供支持的通用服务进行分离。IoC和AOPAOP实现机制实现AOP的技术,主要分为两大类:采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。在代码的编译阶段植入Pointcut的内容,优点是性能好,但灵活性不够;采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;在代码执行阶段,在内存中截获对象,动态的插入Pointcut的内容,优点是不需要额外的编译,但是性能比静态织入要低。IoC和AOP配置AOP可以通过配置文件或者编程的方式来使用SpringAOP。配置可以通过xml文件来进行,大概有四种方式:配置ProxyFactoryBean,显式地设置advisors,advice,target等配置AutoProxyCreator,这种方式下,还是如以前一样使用定义的bean,但是从容器中获得的其实已经是代理对象通过<aop:config>来配置通过<aop:aspectj-autoproxy>来配置,使用AspectJ的注解来标识通知及切入点也可以直接使用ProxyFactory来以编程的方式使用SpringAOP,通过ProxyFactory提供的方法可以设置target对象,advisor等相关配置,最终通过getProxy()方法来获取代理对象。IoC和AOP配置AOPAspectJ切入点切入点的概念是AOP的关键,它使AOP区别于其他使用拦截的技术。切入点指示符用来指示切入点表达式目的,在SpringAOP中目前只有执行方法这一个连接点,SpringAOP支持的AspectJ切入点指示符如下:execution:用于匹配方法执行的连接点;within:用于匹配指定类型内的方法执行;this:用于匹配当前AOP代理对象类型的执行方法;target:用于匹配当前目标对象类型的执行方法;注意是目标对象的类型匹配,这样就不包括引入接口也类型匹配;args:用于匹配当前执行方法传入的参数为指定类型的执行方法;IoC和AOP配置AOP@within:用于匹配所以持有指定注解类型内的方法;@target:用于匹配当前目标对象类型的执行方法,其中目标对象持有指定的注解;@args:用于匹配当前执行的方法传入的参数持有指定注解的执行;@annotation:用于匹配当前执行方法持有指定注解的方法bean:SpringAOP扩展的,AspectJ没有对于指示符,用于匹配特定名称的Bean对象的执行方法;referencepointcut:表示引用其他命名切入点,只有@ApectJ风格支持,Schema风格不支持。IoC和AOP配置AOP配置文件applicationContext.xmlSpring配置文件是用于指导Spring工厂进行Bean生产、依赖关系注入(装配)及Bean实例分发的"图纸"。JavaEE程序员必须学会并灵活应用这份"图纸"准确地表达自己的"生产意图"。使用MyEclipse2014时,它会自动在项目的src下建立applicationContext.xml文件。Spring事务管理机制传统JDBC事务管理Spring提供的编程式的事务处理5Spring声明式事务处理事务的传播行为和隔离级别Spring事务管理机制传统JDBC事务管理以往使用JDBC进行数据操作,使用DataSource,从数据源中得到Connection,我们知道数据源是线程安全的,而连接不是线程安全的,所以对每个请求都是从数据源中重新取出一个连接。一般的数据源由容器进行管理,包括连接池。Spring事务管理机制Spring提供的编程式的事务处理Spring提供了几个关于事务处理的类:TransactionDefinition:事务属性定义
TranscationStatus:代表了当前的事务,可以提交,回滚。
PlatformTransactionManager:Spring提供的用于管理事务的基础接口,其下有一个实现的抽象类AbstractPlatformTransactionManager,我们使用的事务管理类例如DataSourceTransactionManager等都是这个类的子类。Spring事务管理机制Spring提供的编程式的事务处理声明数据源;
声明一个事务管理类,例如:DataSourceTransactionManager,HibernateTransactionManger,JTATransactionManager等;在代码中加入事务处理代码。Spring事务管理机制Spring声明式事务处理Spring声明式事务处理也主要使用了IoC和AOP思想,提供了TransactionInterceptor拦截器和常用的代理类TransactionProxyFactoryBean,可以直接对组件进行事务代理。
使用TransactionInterceptor的步骤如下:
定义数据源,事务管理类定义事务拦截器。Spring事务管理机制事务的传播行为和隔离级别事务是逻辑处理原子性的保证手段,通过使用事务控制,可以极大的避免出现逻辑处理失败导致的脏数据等问题。事务最重要的两个特性,是事务的传播级别和数据隔离级别。传播级别定义的是事务的控制范围,事务隔离级别定义的是事务在数据库读写方面的控制范围。Spring事务管理机制事务的传播行为和隔离级别Spring事务的传播行为Spring事务的传播行为说的是当一个方法调用另一个方法时,事务该如何操作。事务的第一个方面是传播行为。传播行为定义关于客户端和被调用方法的事务边界。Spring定义了7种传播行为。PROPAGATION_MANDATORY:该
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 炉外精炼工岗中核心管理考核试卷含答案
- 水生植物栽培工风险识别模拟考核试卷含答案
- 柠檬酸发酵工安全素养强化考核试卷含答案
- 2025年甘肃省陇南地区两当县数学四年级下学期期末达标检测试题(含答案)
- 验光员必做试题及答案指引
- 税务知识试题与答案
- 2025年潮州市四年级数学下学期期末考试模拟试题含答案
- 河北承德市多校2026-2027学年高二上学期开学英语试题(文字版含答案)
- 侨务法常见试题及答案解析
- 眼镜营销实战试题及答案分享
- 小儿推拿(大全)课件
- 第课香蕉多少钱一斤
- 堤防波浪壅高、爬高计算表格
- 脊柱内镜应用与进展
- 12种气候类型总结
- 第6课《夜间飞行的秘密》第二课时(分层作业单)四年级语文上册部编版
- 《概念产品设计》
- JJG 761-2016电极式盐度计
- GB/T 41495-2022混凝土泵车保养、维修及报废规范
- 空客飞机AMM-IPC-TSM手册使用课件
- 一颗超级顽固的牙课件
评论
0/150
提交评论