软件架构设计实践- 基于SSM框架 课件 第6章 Spring的AOP机制_第1页
软件架构设计实践- 基于SSM框架 课件 第6章 Spring的AOP机制_第2页
软件架构设计实践- 基于SSM框架 课件 第6章 Spring的AOP机制_第3页
软件架构设计实践- 基于SSM框架 课件 第6章 Spring的AOP机制_第4页
软件架构设计实践- 基于SSM框架 课件 第6章 Spring的AOP机制_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

基于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)将切面、切入

温馨提示

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

评论

0/150

提交评论