TreeMind树图在线AI思维导图
当前位置:树图思维导图模板IT互联网产品结构SpringAOP思维脑图思维导图

SpringAOP思维脑图思维导图

  收藏
  分享
免费下载
免费使用文件
灰色と青 浏览量:52023-11-30 19:58:41
已被使用0次
查看详情SpringAOP思维导图

AOP在spring中的使用相关内容讲解

树图思维导图提供 SpringAOP思维脑图 在线思维导图免费制作,点击“编辑”按钮,可对 SpringAOP思维脑图  进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:4b247c05c5d6f8e1369599254f4238d6

思维导图大纲

Spring-AOP-03思维导图模板大纲

什么是AOP?

AOP全程位Aspect Oriented Programming(面向切面编程) OOP——————面向对象编程 POP——————面向过程编程

OOP语言提供了类与类之间纵向的关系(继承,接口), 而AOP补充了横向的关系

AOP是一种编程思想,也是一种设计模式,是面向对象编程的一种补充。 面向对象编程将程序抽象成各个层次的对象,而面向切面编程是将程序抽象成各个切面。

SpringAOP

其实就是spring中引入了AOP的思想 springaop一般用于在项目中实现 日志记录,用户操作行为日志记录,权限控制,事务管理等操作。

3.1SpringAOP和AspectJ的渊源 AspectJ是一个专门主打面向切面编程的框架。 使用一种特殊的语言来编写切面代码,后缀是.aj格式。 SpringAOP底层也是使用了AspectJ的方案,但是在上层做了很多封装层面的工作,可以让开发 人员直接使用Java代码来编写切面

AOP的术语

目标对象 Target

被代理的对象

代理 (Proxy)

一个类被AOP织入增强后,就产生了一个结果代理类。

链接点(Join Pointer)

连接点有很多种,比如方法执行期间(开始执行,执行结束,抛出异常) ,字段修饰符,字段制备更改...等等

理论上所有可能被切入的地方都可以称之为链接带你,————及被拦截的带你。 其实 就是目标对象的方法

在Spring AOP种支支持方法链接点 因为Spring AOP底层是通过动态代理实现的。

连接点 与切入点 的关系可以简单理解为: 切入点一定是连接点,但连接点不一定是切入点。

切入点 ——(Pointcut)

选择切入某个连接点的操作,将切面代码织入进去。 这个连接点就叫做切入点

在SpringAOP中需要使用切点表达式来定义切入点 切点表达式支持以下几种类型(仅需要了解execution表达式即可)!!!

切入点表达式格式: execution( [修饰符] 返回值类型 com.lanou..Target.方法名(参数)) eg:execution( * com.lanou.Target.save(..))

1:访问修饰符可以省略 2:返回值类型、报名、类名、方法名可以使用*代表任意 3:包名与类名之间一个点,代表当前包下的类,两个带你..表示当前包及其子包下的类 4:参数列表可以使用两个点 . . 表示任意个数,任意类型的参数列表

切入点表达式与或非

切入点表达式也支持逻辑运算: &&、||、!

通知————(Advice)

通知决定了切面代码织入到目标代码中后,运行的时机 (比如实在目标方法执行前,还是执行后),可以理解为 就是增强的操作,也就是共性的操作

SpringAOP中提供了五种通知类型:

前置通知(before) 权限控制,日志记录)

在目标方法调用前面,通知切脉你,什么参数都无法获取。 也不能终止目标方法执行

后置(返回值)通知(after returning)(日志记录)

只有在目标方法 正常 执行结束后才会通知,在通知方法中可以获取到方法的返回值

环绕通知(around)

在目标方法执行前, 后被通知, 可以获取链接点对象(ProceedingloinPoint,该对象可以获取被拦截方法的签名,参数,返回值,包括调用与否

该方法的返回值,既代表了真正业务逻辑代码的返回值

可以选择终止或正常执行目标方法

异常通知(after throwing) (记录运行产生的异常信息到服务日志文件中)

只有在目标方法 出现异常 才会通知 , 在通知方法中可以获取到抛出的异常信息

最终通知 ——(after)

在目标方法执行结束后通知切面,什么参数也无法获取, 无论目标方法是正常执行结束,还是抛出异常终止,都会被通知。

切面————(Aspect)

简单来所,切面就是我们遥望目标代码中插入进去的代码 是 切点 和 通知 的结合

织入————(Weaving)

织入的过程其实就是 SpringAOP帮我们把切面中的代码织入到目标代码中的过程。 创建代理对象的过程

为什么需要AOP

想象,在开发中多个模块间有某段重复的代码,应该如何处理? 其实就是将冗余的代码(相同的代码)抽取到代理类中,减少了代码量 多个地方具有相同的特性提取出来,这就是AOP的解决方向,比较节省资源。

基于XML 和 注解方式 在Spring中使用AOP

在目标对象实现类添加注解@Component

在通知类添加注解 标识我的切面

配置applicationxml文件

编写aop context命名空间

注解支持,包扫描

aop注解支持

测试类 SpringTest

基于XML方式 在Spring中使用AOP

添加依赖

创建com.lanou软件包

创建aop软件包

在aop中创建 目标接口 TargetInterface

public interface TargetInterface { public String save(); }

创建目标接口实现类 TargetInterfaceImpl

public class TargetInterfaceImpl implements TargetInterface{ @Override public String save() {//连接点 System.out.println("目标对象的连接点...save执行了..."); return "保存完成"; } }

创建aspect切面软件包

创建通知类 MyAspect

前置通知

后置通知

环绕通知

异常通知

最终通知

创建test测试软件包

SpringTest

在resources资源文件中 新建application.xml配置文件

需要在配置文件的beans配置 xml命名空间

xmlns:aop="http://www.springframework.org/schema/aop" http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd

配置目标对象

配置通知类

配置aop 代理 织入 切入 通知 切面

基于纯 注解方式 在Spring中使用AOP

在xml和注解的基础上不需要application.xml配置文件 只需要编写配置类SprignConfiguration

声明该类位 注解配置类

注解组件扫描包 目录

开启aop注解支持

测试类 SpringTestFullAnno

Spring AOP代理机制实现原理

Spring AOP底层支持两种动态代理实现

JDK原生的动态代理,基于接口的代理方式(工作几乎不可能用,仅了解)

Cglib动态代理,继承的代理方式 (代理类 继承 被代理类) 有接口没接口都支持

Spring在创建代理对象是,会自动选择要使用哪种代理方案,如果被代理的类实现类接口,就用JDK动态代理 反之(代理类继承了被代理类)使用Cglib动态代理

JDK原生动态代理

区别 静态代理 每代理一个类就需要创建一个专门的代理类, 动态代理 就只需要一个通用的代理类,即可代理所有实现类接口的类

子主题 1

Cglib动态代理

相关思维导图模板

精神症状思维导图

树图思维导图提供 精神症状 在线思维导图免费制作,点击“编辑”按钮,可对 精神症状  进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:0528f351d8269d3bd92d3a2d2478d63d

职业成长地图思维脑图思维导图

树图思维导图提供 职业成长地图思维脑图 在线思维导图免费制作,点击“编辑”按钮,可对 职业成长地图思维脑图  进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:0f7b52de05b5dc17d48004ff3a4fb340