版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于SSM框架的软件架构设计实战Software
Architecture
Design
Practice
Based
on
SSM
Framework第6章Spring的AOP机制1234面向切面编程的概念Spring
AOP——编程式Spring
AOP——声明式Spring
AOP——AspectJ面向切面编程的概念面向切面编程的概念问题的提出面向切面编程的概念问题违反“开放封闭”原则程序员无法专注于业务逻辑解决思路将这类与业务逻辑无关的重复代码抽取出来,放到独立模块中面向切面编程的概念面向切面编程(AOP,AspectOrientedProgramming)将分散在各个业务逻辑中的相同代码,通过“横向切割”的方式抽取到独立模块中一方面增强代码复用性,另一方面使编程人员专注于业务逻辑面向切面编程的概念横切性关注点(cross-cuttingconcerns):在一个业务流程中插入与业务逻辑无关的系统服务逻辑,这样的逻辑称为横切关注点连接点(jointpoint):程序执行过程中明确的点,如方法调用或抛出特定异常增强/通知(advice):拦截到连接点之后所要做的事情切入点(pointcut):一个增强将被引发的一类连接点的统称切面/方面(aspect):横切性关注点的抽象,是切入点和增强的结合织入(weaving):将增强应用到连接点的过程面向切面编程的概念SpringAOP基于动态代理技术,把增强、切点、切面等抽象成类,便于应用,Spring
AOP既支持JDK动态代理,也支持CGLib动态代理如果目标对象实现了接口,默认采用JDK动态代理也可以强制使用CGLib动态代理如果没有实现接口,则使用CGLib动态代理SprinG
AOP——
编程式Spring
AOP——编程式(增强)SpringAOP将增强代码织入连接点的原理:扫描所有类,发现有实现增强接口的类则将其中的增强方法织入Spring
AOP——编程式(增强)Spring
AOP中增强的类型前置增强:在目标方法调用前执行后置增强:在目标方法调用后执行异常增强:在目标方法调用发生异常后执行环绕增强:在目标方法调用前和调用后执行引介增强:为目标类创建实现新接口的代理Spring
AOP——编程式(增强)Spring
AOP——编程式(增强)定义增强类,实现特定增强接口在增强类中重写特定方法,实现增强操作使用时创建代理工厂(ProxyFactory)调用代理工厂的setTarget()方法设置目标对象,传入目标对象作为参数调用代理工厂的addAdvice()方法添加增强,传入增强类实例作为参数调用ProxyFactory的getProxy()方法获取代理对象Spring
AOP——编程式(增强)前置增强类method表示连接点方法,其类型为Methodargs为连接点方法的参数,它是一个Object数组target为目标对象。Spring
AOP——编程式(增强)后置增强类returnValue:连接点方法的返回值method:连接点方法args:连接点方法的参数target:目标对象Spring
AOP——编程式(增强)后置增强类Spring
AOP——编程式(增强)异常增强类method:连接点方法args:连接点方法的参数target:目标对象ex:连接点方法抛出的异常Spring
AOP——编程式(增强)异常增强类Spring
AOP——编程式(增强)环绕增强类Spring
AOP——编程式(增强)引介增强类让目标对象实现一个它原本没有实现的接口继承DelegatingIntroductionInteceptor类Spring
AOP——编程式(切面)增强提供了一部分织入的位置信息,即方法的前面、后面等。但没有指定织入到哪些类的哪些方法中哪些类的哪些方法,这种信息使用切入点描述切面=切入点+增强Spring
AOP——编程式(切面)Spring
AOP——编程式(切面)静态方法名匹配切面:通过类过滤和方法名匹配定义切入点实现步骤定义切面类,继承StaticMethodMatcherPointcutAdvisor类重写matches()方法(在MethodMatcher接口中定义)Spring
AOP——编程式(切面)静态方法名匹配切面method:连接点方法,其类型是MethodtargetClass:目标对象的类型,其类型为Class<?>,表示任意类类型Spring
AOP——编程式(切面)静态方法名匹配切面Spring
AOP——编程式(切面)静态正则表达式方法名匹配切面:通过正则表达式匹配方法名定义切入点实现类:RegexpMethodPointcutAdvisor,此类所实现的功能已经足够,不用再定义子类Spring
AOP——编程式(切面)静态正则表达式方法名匹配切面Spring
AOP——编程式(切面)动态切面编程时就确定好的切面称为静态切面,相应的切点称为静态切点,有时不仅需要依靠方法名确定切点,还要根据方法参数确定切点,在运行期确定的切点,称为动态切点,相应的切面称为动态切面。Spring
AOP——编程式(切面)动态切面:实现步骤定义一个切点类,继承DynamicMethodMatcherPointcut类重写matches()方法Spring
AOP——编程式(切面)动态切面method:连接点方法targetClass:目标对象args:连接点方法的入参,其类型为Object类型的可变参数Spring
AOP——编程式(切面)动态切面Spring
AOP——编程式(切面)引介切面由于引介增强只能作用于类,而不能作用于方法,因此引介切面不需要指定切入点使用Spring提供的类DefaultIntroductionAdvisorSPRING
AOP——
声明式Spring
AOP——声明式Spring借助IoC,把各种对象(代理工厂、目标对象、代理对象、切面、增强等)的创建交给IoC容器管理。使用时,直接从容器中获取代理对象使用。其核心是ProxyFactoryBean类,它是FactoryBean的实现类,负责为其它Bean创建代理对象。Spring
AOP——声明式配置文件编写步骤声明增强或切面Bean声明目标对象Bean声明代理对象Bean,class属性为ProxyFactoryBean注入代理对象Bean的interfaces属性注入代理对象Bean的target属性(目标对象)注入代理对象Bean的interceptorNames属性(增强或切面)根据具体问题注入代理对象Bean的proxyTargetClass属性SPRING
AOP——
AspectJSpring
AOP——AspectJSpringAOP:运行期织入切入点的表达不够丰富(如:无法切入到具有特定注解的方法内)无法织入到static方法使用配置式时,目标对象只能是Spring容器内的BeanSpring
AOP——AspectJAspectJ的优势:无论是通过注解和配置文件,配置AspectJ都更直观、紧凑,配置过程相对于SpringAOP更友好。AspectJ支持编译期织入,而SpringAOP只支持运行期织入,增强代码织入的位置受限,如无法织入到具有特定注解的方法上。AspectJ定义了一套完整的切入点表达式,切入点的定义更丰富、更灵活。AspectJ定义切面不需要继承框架提供的类或实现框架提供的接口,侵入性更小。Spring
AOP——AspectJ(基于注解)定义切面类使用注解在切面类内定义切入点和增强方法使用时创建代理工厂(AspectJProxyFactory类的实例)调用代理工厂的setTarget()方法设置目标对象调用代理工厂的addAspect()方法添加切面调用代理工厂的getProxy()方法获得代理对象Spring
AOP——AspectJ(基于注解)AspectJ注解@Aspect:标记一个切面类@Pointcut:标记切点@Before:标记前置增强方法@AfterReturning:标记后置增强方法@After:标记最终增强方法@AfterThrowing:标记异常增强方法@Around:标记环绕增强方法@DeclareParents:标记引介增强Spring
AOP——AspectJ(基于注解)切入点表达式=函数(关键字)+参数函数共有4类9个方法切入点函数方法入参切入点函数目标类切入点函数代理类切入点函数类别函数参数说明方法切入点函数execution()方法名模式串匹配参数指明的所有方法@annotation()方法注解名匹配标注了参数指明的注解的方法方法入参切入点函数args()类名匹配带有参数指明的入参的方法@args()类注解名匹配入参标注了参数指明的注解的方法目标类切入点函数within()类名模式串匹配参数指明的类内的所有方法target()类名匹配参数指明的类(接口)及其子类(实现类)内的所有方法@within()类注解名匹配标注了参数指明的注解的类(接口)及其子类(实现类)中的所有方法@target()类注解名匹配标注了参数指明的注解的类中的所有方法代理类切入点函数this()类名匹配参数指定的目标类及其子类内的方法Spring
AOP——AspectJ(基于注解)通配符含义*匹配任意字符,但只能匹配上下文中的一个元素..匹配任意字符,可以匹配上下文中的多个元素,但在表示类时,必须与*联合使用,表示入参时单独使用+表示匹配指定类的所有子类或指定接口的所有实现类,必须跟在类名或接口名后面Spring
AOP——AspectJ(基于注解)逻辑运算符配置文件中的写法含义&&and与||or或!not非例:@Before("anyMethod()&&args(java.lang.String)")表示同时满足两个表达式所定义的切入点Spring
AOP——AspectJ(基于注解)Spring
AOP——AspectJ(基于XML)将切面、切入点、增强等信息从注解中移到配置文件中,其优势是完全实现了“非侵入性”。使用步骤编写切面类建立配置文件,在配置文件中声明aop命名空间编写配置文件Spring
AOP——AspectJ(基于XML)注意事项一个配置文件中可以定义多个<aop:config>标签,每个标签可以使用不同的proxy-target-class属性<aop:pointcut>标签可以定义在<aop:aspect>标签内,此时该切入点只能被其所在的切面使用Q&A
Time基于SSM框架的软件架构设计实战Software
Architecture
Design
Practice
Based
on
SSM
Framework第7章SpringMVC基础12345MVC的概念Spring
MVC概述请求的响应请求参数的绑定视图与视图的选择MVC的概念MVC的概念图形用户界面(GUI)的三个关注点:数据的呈现、UI逻辑、业务逻辑自治视图(AutonomousView):将三个关注点糅合在一起,它的问题:重用性低稳定性差可测试性差MVC的概念关注点分离(SeparationofConcerns,SoC):将各个关注点分离开,并通过合理的接口将它们之间的依赖降到最低MVC模式:即模型(model)-视图(view)-控制器(controller)模式就是实现关注点分离的一种软件设计模式MVC的概念MVC的组成部分model:对应用状态和业务功能的封装,它接受controller的请求并完成相应的业务处理,并在应用状态改变时向view发出通知view:呈现界面,捕捉输入controller:接受view捕捉的用户输入,如果有业务逻辑调用,则调用model的相应功能,根据需要选择向用户呈现的viewMVC的概念MVC的概念要点controller的主要职责是封装UI逻辑和选择要呈现的view。model和view之间有直接联系。view可以调用model查询其状态信息;model的状态发生变化时,直接通知view。MVC仅仅是一个基本的指导方针,是一个宽泛的概念。MVC的概念存在的问题增加了系统结构和实现的复杂性三个部分的职责不平衡view和model没有解耦实际应用中,model和controller的职责不容易划分清楚Spring
MVC概述Spring
MVC概述结构前端控制器DispatcherServlet处理器映射器HandlerMapping处理器适配器HandlerAdapter处理器Handler视图解析器ViewResolverSpring
MVC概述Spring
MVC概述创建Spring
MVC应用的步骤创建Java
Web应用程序导入必要的jar包,或在项目管理工具中配置依赖项创建控制器类创建作为视图的jsp文件创建Spring配置文件在web.xml中配置前端控制器请求的响应请求的响应让一个函数响应HTTP请求,我们做了这些事在类上应用@Controller注解,将类标注为控制器Bean在方法上应用@RequestMapping注解,将方法标注为处理器方法返回一个ModelAndView类的实例,是对Model和View的抽象,它封装了数据,并选择了一个视图在视图文件里,取出ModelAndView中的数据并显示在页面上请求的响应Spring
MVC响应请求的过程Web应用程序启动,控制器类的Bean被实例化(@Controller)前端控制器(Servlet)拦截客户端请求对请求路径进行解析如果是对处理器的请求,则执行相应处理器方法(@RequestMapping)根据处理器返回值,找到相应视图请求的响应@RequestMapping注解作用1.用在方法上,将一个方法标注为处理器如上处理器的请求路径就是:网站根路径/student-list请求的响应@RequestMapping注解作用2.用在类上,为类中的处理器提供一个统一的请求父路径如上处理器的请求路径就是:网站根路径/student/list成员名类型含义valueString、String[]请求路径pathString、String[]value的别名nameString处理器名methodRequestMethod、RequestMethod[]指定这个处理器可以响应的请求方式paramsString、String[]指定这个处理器只能响应包含特定参数(以及值)的请求headersString、String[]指定这个处理器只能响应请求头中包含特定域的请求consumesString、String[]指定这个处理器只能响应特定内容类型的请求producesString、String[]指定这个处理器返回的响应体的类型请求的响应请求的响应method成员类型:RequestMethod,或RequestMethod数组作用:指定处理器可以响应的请求方式注意事项:SpringMVC支持8种HTTP请求方法如果提供RequestMethod数组,则会响应数组中指定的请求方式如果请求的方法不被响应,则会返回405(Method
Not
Allowed)错误如果不指定该成员,默认响应所有类型的请求请求的响应常见的HTTP状态码1xx:信息,服务器收到请求,需要请求者继续执行操作2xx:成功,操作被成功接收并处理3xx:重定向,需要进一步的操作以完成请求4xx:客户端错误,请求包含语法错误或无法完成请求5xx:服务器错误,服务器在处理请求的过程中发生了错误状态码名称含义200OK请求成功(一般性的成功)201Created请求成功并创建了资源,用于POST请求204No
Content请求成功但未返回内容,一般用于DELETE请求400Bad
Request请求的语法错误,服务器无法理解401Unauthorized要求用户身份认证403Forbidden服务器理解此请求,但拒绝执行此请求404Not
Found请求的资源无法找到405Method
Not
Allowed请求方法被禁止406Not
Acceptable服务器无法根据客户端请求的内容特性完成请求415Unsupported
Media
Type服务器无法处理请求附带的媒体格式500Internal
Server
Error服务器内部错误请求的响应方法名含义GET向特定的资源发出请求,数据包含在请求路径中。POST向指定资源提交数据,数据包含在请求体中,POST请求可能会导致新的资源的建立和/或已有资源的修改。HEAD向服务器请求与GET请求相一致的响应,只不过响应体将不会被返回。PUT向指定资源位置上传新数据DELETE请求删除指定位置上的资源PATCH局部更新指定位置上的资源OPTIONS返回服务器针对特定资源所支持的HTTP请求方法TRACE回显服务器收到的请求,主要用于测试或诊断请求的响应请求的响应由于GET、POST、DELETE、PUT、PATCH这几类请求很常用,Spring
MVC提供了如下几个注解代替@RequestMapping@GetMapping@PostMapping@DeleteMapping@PutMapping@PatchMapping请求的响应params成员类型:String或String[]作用:指明只响应包含特定的参数和参数值的请求常见格式:params="id",表示请求中必须包含名为id的参数params="id=1",表示请求中必须包含名为id的参数,且值必须为1params={"id=1","otherParam"},表示请求中必须包含名为id,otherParam两个参数,且id必须为1请求的响应params成员注意:如果请求中不包含必要的参数或参数值,则会返回400(Bad
Request)错误请求的响应headers成员类型:String或String[]作用:指明只响应请求头中包含特定内容的请求注意事项:如果没有提供必要的请求头,会返回404(Not
Found)错误请求的响应consumes成员类型:String或String[]作用:指明只响应具有特定内容类型(Content-Type)的请求注意事项:通过GET方式提交的请求没有请求体,因此请求头中也没有Content-Type这个成员的作用实际上是声明服务器对何种格式的请求体数据具备处理能力如果请求中没有提供指定的内容类型,会返回415(Unsupported
Media
Type)错误请求的响应produces成员类型:String或String[]作用:指明只有当请求头中的Accept字段包含特定内容时才响应注意事项:这个成员的作用实际上是声明服务器可以提供何种格式的响应体数据如果请求中的Accept字段值与produces成员不符,则会返回406(Not
Acceptable)错误请求参数的绑定请求参数的绑定请求参数的绑定解决的问题是:客户端随请求发送的数据(请求参数)在服务器端如何获取请求参数的绑定字面值的绑定Spring
MVC会默认将客户端提交的同名参数赋值给处理器的入参,并进行类型解析请求参数的绑定@RequestParam注解用于处理器的入参作用:指明客户端提交的参数和处理器入参的绑定关系成员:name,指明客户端提交的参数名成员:require,指明参数是否为必须,默认为true如果上述两个成员的条件不满足,会返回一个400(Bad
Request)错误请求参数的绑定此处“name”即为客户端提交的参数名,客户端页面可能是:请求参数的绑定对象类型参数的绑定有时会把多个请求参数封装在一个实体对象中,便于处理器处理。此时,SpringMVC会自动去找对象中各个属性,然后绑定同名请求参数。请求参数的绑定对应的客户端页面可能是:如将stuName和age封装为Student类的属性后,处理器代码为:请求参数的绑定客户端提交数组通常出现在页面中使用复选框的时候。此时如果提交数据,勾选的复选框对应的参数会作为数组元素提交到处理器。请求参数的绑定处理器代码注意事项:绑定数组元素时也会进行类型解析,如果转换不成功会报错请求参数的绑定路径变量把请求参数作为请求路径的一部分,这一部分可以被Spring
MVC解析出来并绑定到处理器入参上绑定方法@RequestMapping注解的请求路径成员中,放在{}内的部分就会被当做一个路径变量在处理器入参上使用@PathVariable注解,则会将二者进行绑定请求参数的绑定处理器代码请求参数的绑定使用路径变量注意事项路径变量的名字如果与@PathVariable标注的处理器入参不同,需要使用@PathVariable的value成员指明,如@PathVariable("id")
String
cid入参必须用@PathVariable注解标注,否则这个参数会被当做请求路径问号后面的请求参数声明了路径变量必须提供,否则会得到一个404(Not
Found)错误数据校验数据校验确定绑定的参数的数据类型和值的合法性。在JSR-303中,提供了一组用于实体数据校验的注解,通过在实体类的属性上使用这些注解,来对要注入的属性值进行限制。数据校验JSR-303数据校验注解@Null:检查对象是否为null@NotNull:检查对象是否不为null@AssertTrue:检查Boolean值是否为true@AssertFalse:检查Boolean值是否为false@Min(value):检查数值是否大于等于给定值@Max(value):检查数值是否小于等于给定值@DecimalMin(value):检查BigDecimal是否大于等于给定值@DecimalMax(value):检查BigDecimal是否小于等于给定值@Size(max,min):检查集合的大小是否在给定范围内@Digits(integer,fraction):检查字符串是否符合指定的数值格式@Past:检查日期时间类型值是否在当前时间之前@Future:检查日期时间类型值是否在当前时间之后数据校验HibernateValidator附加注解@Length(min,max):检查字符串长度是否在给定范围内@NotBlank:检查字符串是否为null,以及是否为空白@NotEmpty:检查字符串是否为null,以及是否为empty@URL:检查字符串是否为URL格式@Range(min,max):检查数值是否介于给定的范围内@UniqueElements:检查集合中的元素是否没有重复@Email:检查字符串是否为email格式数据校验实体类代码数据校验处理器代码数据校验说明在需要校验的实体对象前使
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 泰康协议存款合同的会计处理
- 写字楼清洁维护合同
- 装饰工程定金支付协议
- 会议合作进口协议
- 房屋买卖合作合同范本内容示例
- 全面法务支持服务劳动合同
- 园林绿化景观工程
- 保安职责承诺书
- 家电运输协议范本
- 不锈钢制品采购合同范本
- 石油化工班组安全生产标准化建设活动实施方案
- 沟通的艺术(湖南师范大学)【智慧树知到】章节答案
- 安徽泰格生物科技有限公司年生产1500吨肌酸及500吨胍基乙酸项目环境影响报告表
- 中石化公司HSE关键岗位人员学习考试题库
- 无损检测二级考试渗透检测
- 斐波那契数列与黄金分割讲义
- python程序设计教学教案
- 老舍《我的母亲》原文阅读
- 幼儿园大班语言教案《五粒豌豆》含反思
- 言语的第一思维找重点句
- YS/T 1027-2015磷酸铁锂
评论
0/150
提交评论