第14章 面向切面编程(Spring AOP) 教学PPT

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。


例,模拟AOP的执行过程。

14.2 手动代理
JDK动态代理
JDK动态代理是通过JDK中的 java.lang.reflect.Proxy 类来实现的。
案例代码
接下来,通过一个案例来演示JDK动态代理具体的实现步骤,如文件 14-1~14-5所示。

14.2 手动代理
通过前面的学习可知,JDK的动态代理用起来非常简单,但它是有局限 性的,使用动态代理的对象必须实现一个或多个接口。

本章小结
本章主要讲解了面向切面编程(AOP)思想,首先对 AOP进行了简单的介绍,通过手动代理模拟了AOP的执行 过程,然后通过案例演示了如何使用Spring工厂进行底 层开发,最后讲解了使用AspectJ框架的开发过程。
通过本章的学习,读者可以熟悉AOP的作用和相关概
念、了解AOP的执行过程、掌握使用AspectJ框架进行开 发的两种方式。
用于定义一个切面。 用于定义前置通知,相当于BeforeAdvice。 用于定义后置通知,相当于AfterReturningAdvice。 用于定义环绕通知,相当于MethodInterceptor。 用于定义抛出通知,相当于ThrowAdvice。
@After
@DeclareParents
用于定义最终final通知,不管是否异常,该通知都会执行。
那么,如何代理没有实现接口的类?

14.2 手动代理
CGLIB代理
如果想代理没有实现接口的类,那么可以使用CGLIB代理。 CGLIB(Code Generation Library)是一个高性能开源的代码 生成包,它的底层是通过使用一个 小而快的字节码处理框架ASM(Java 字节码操控框架)来转换字节码,为 一个类创建子类,然后对子类进行 增强,解决无接口代理问题。所以 CGLIB要依赖于ASM的包,解压 Spring的核心包spring-core3.2.2.RELEASE.jar,文件目录如图 所示。

14.2 手动代理
Hibernate
案例代码
接下来,通过一个案例来演示实 现CGLIB的代理过程,如文件146~14-8所示。
的 举个例子 二级缓存 For example

14.3 声明式工厂Bean
在14.2小节中,讲解了AOP手动代理
概述
,接下来通过讲解Spring的通知来介绍 Spring是怎样创建AOP代理的。
概述
式的支持。@AspectJ 是AspectJ1.5新增功 能,通过JDK5.0注解技术,允许直接在Bean 类中定义切面,新版本Spring框架,建议使 用AspectJ方式来开发AOP,接下来对两种 AspectJ的开发方式进行讲解。

14.4 AspectJ开发
基于XML的声明式AspectJ

14.1 Spring AOP简介
AOP术语
AOP的专业术语包括Joinpoint、Pointcut、Advice、Target、Weaving、
Proxy和Aspect,对于专业术语的解释,具体如下:
Joinpoint(连接点):是指那些被拦截到的点,在Spring中,可以被动态代理拦截目标类的 方法。 Pointcut(切入点):是指要对哪些Joinpoint进行拦截,即被拦截的连接点。 Advice(通知):是指拦截到Joinpoint之后要做的事情,即对切入点增强的内容。 Target(目标):是指代理的目标对象。

14.4 AspectJ开发
基于Annotation的声明式AspectJ
基于XML的声明式ApectJ有一个缺点就是要在Spring文件中配置大量的信息 。为了解决这个问题,AspectJ框架为AOP提供了一套Annotation注解,用以取 代Spring配置文件中为实现AOP功能所配置的臃肿的代码。 @AspectJ @Before @AfterReturning @Around @AfterThrowing

SSH框架整合实战教程
第14章 面向切面编程(Spring AOP)
• 手动代理—JDK动态代理 • 基于XML的声明式AspectJ • 手动代理—CGLIB代理 • 基于Annotation的声明式AspectJ
• 声明式工厂Bean

学习目标
了解AOP的执行过程
熟悉AOP的作用 和相关概念
1
掌握
2
掌握ApplicationContext 容器的使用以及IoC和DI的思想
3

目录
Spring AOP简介
☞点击查看本小节知识架构
手动代理
☞点击查看本小节知识架构
声明式工厂Bean
☞点击查看本小节知识架构
AspectJ开发
☞点击查看本小节知识架构

14.1 Spring AOP简介
什么是AOP?

14.3 声明式工厂Bean
声明式Spring AOP
通过在Spring中创建一个AOP代理的基本方法是,使用 org.springframework.aop.framework.ProxyFactoryBean,这个类对应的切入 点和通知提供了完整的控制能力,生成指定的内容。该类的常用属性如下。
为了将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起 来,Spring提供了面向切面的编程方式,也称Spring AOP,AOP的全称是
Aspect Oriented Programing,即面向切面编程。
AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码,主要体现 在事务处理、日志管理、权限控制、异常处理等方面,使开发人员在编写业 务逻辑时可以专心于核心业务,提高了代码的可维护性。
用于定义引介通知,相当于IntroductionInterceptor (不要求掌握)。

14.4 AspectJ开发
Hibernate
案例代码
接下来,通过一个案例来演示在项目 中如何基于注解进行AOP开发,重新 上一小节的功能,如文件14-15~1417所示。
的 举个例子 二级缓存 For example
Weaving(织入):是指把增强代码应用到目标上,生成代理对象的过程。
Proxy(代理):是指生成的代理对象。
Aspect(切面):是切入点和通知的结合。

14.2 手动代理
代理模式是 Java 中的常用设计模式,代理 类通过调用被代理类的相关方法,提供预处理、
概述
过滤、事后处理等服务。AOP手动使用代理模式 有两个典型的例子,分别为JDK动态代理和CGLIB 代理。为了让读者了解AOP的执行过程,本小节 将通过这两种手动代理的实现方式,结合相关案

14.3 声明式工厂Bean
1、环绕通知 在Spring通知中,环绕通知是一个非常典型的应用。
案例代码
接下来,通过一个环绕通知的案例,来演示Spring创建AOP代理的 步骤,如文件14-9~14-11所示。

14.4 Aspect源自文库开发
AspectJ是一个基于Java语言的AOP框架 ,Spring2.0以后新增了对AspectJ切点表达
基于XML的声明式AspectJ是指,通过在XML文件中进行配置,来定义切面、 切入点及声明通知,所有的切面和通知都必须定义在<aop:config>元素内。
案例代码
接下来,通过案例来演示在Spring中使用基于XML的声明式AspectJ
的方式,实现AOP的开发,如文件14-12~14-14所示。

14.3 声明式工厂Bean
Spring通知类型
Spring按照通知在目标类方法的连接点位置,可以分为5种类型,具体如下: • org.springframework.aop.MethodBeforeAdvice(前置通知) 在目标方法执行前实施增强,可以应用于权限管理等功能。 • org.springframework.aop.AfterReturningAdvice(后置通知) 在目标方法执行后实施增强,可以应用于关闭流、上传文件、删除临 时 文件等功能。 • org.aopalliance.intercept.MethodInterceptor(环绕通知) 在目标方法执行前后实施增强,可以应用于日志、事务管理等功能。 • org.springframework.aop.ThrowsAdvice(异常抛出通知) 在方法抛出异常后实施增强,可以应用于处理异常记录日志等功能。 • org.springframework.aop.IntroductionInterceptor(引介通知) 在目标类中添加一些新的方法和属性,可以应用于修改老版本程序(增 强类)。
相关文档
最新文档