AOP概述
AOP(Aspect Orient Programming)是一种设计思想,是软件设计领域中的面向切面编程,它是面向对象编程(OOP)的一种补充和完善。它以通过预编译方式和运行期动态代理方式,实现在不修改源代码的情况下给程序动态统一添加额外功能的一种技术。如图-1所示:
在这里插入图片描述
AOP与OOP字面意思相近,但其实两者完全是面向不同领域的设计思想。实际项目中我们通常将面向对象理解为一个静态过程(例如一个系统有多少个模块,一个模块有哪些对象,对象有哪些属性),面向切面的运行期代理方式,理解为一个动态过程,可以在对象运行时动态织入一些扩展功能或控制对象执行。

AOP 应用场景分析
实际项目中通常会将系统分为两大部分,一部分是核心业务,一部分是非核业务。在编程实现时我们首先要完成的是核心业务的实现,非核心业务一般是通过特定方式切入到系统中,这种特定方式一般就是借助AOP进行实现。

AOP就是要基于OCP(开闭原则),在不改变原有系统核心业务代码的基础上动态添加一些扩展功能并可以"控制"对象的执行。例如AOP应用于项目中的日志处理,事务处理,权限处理,缓存处理等等。如图-2所示:

在这里插入图片描述

AOP 应用原理分析
Spring AOP底层基于代理机制实现功能扩展:

1)假如目标对象(被代理对象)实现接口,则底层可以采用JDK动态代理机制为目标对象创建代理对象(目标类和代理类会实现共同接口)。
2)假如目标对象(被代理对象)没有实现接口,则底层可以采用CGLIB代理机制为目标对象创建代理对象(默认创建的代理类会继承目标对象类型)。
Spring AOP 原理分析,如图-3所示:
在这里插入图片描述

AOP 相关术语分析
切面(aspect): 横切面对象,一般为一个具体类对象(可以借助@Aspect声明)。
通知(Advice):在切面的某个特定连接点上执行的动作(扩展功能),例如around,before,after等。
连接点(joinpoint):程序执行过程中某个特定的点,一般指被拦截到的的方法。
切入点(pointcut):对多个连接点(Joinpoint)一种定义,一般可以理解为多个连接点的集合。
连接点与切入点定义如图-4所示:
在这里插入图片描述
说明:我们可以简单的将机场的一个安检口理解为连接点,多个安检口为切入点,安全检查过程看成是通知。总之,概念很晦涩难懂,多做例子,做完就会清晰。先可以按白话去理解。

AOP实现步骤
公式:AOP=(切面)=通知方法(5种)+切入点表达式(4种)

通知方法
1.@before通知------->在执行目标方法之前执行
2.@after通知------->在执行目标方法之后执行
3.@afterReturning通知------->无论什么时候程序执行完成之后都要执行的通知
4.@afterThrowing通知------->在目标方法执行之后报错时执行
(上述四大类型通知,不能控制目标方法是否执行。一般用来记录程序的执行状态。一般应用与监控的操作。(不改变程序运行的轨迹)
5.@around通知-------> 在目标方法执行前后执行
(环绕通知可控制目标方法是否执行,控制程序的执行的轨迹

切入点表达式
1.@bean(“beanId”) -------> bean:交给spring容器管理的对象,粒度:粗粒度 按bean匹配 当前bean中的方法都会执行通知
2.@within(“包名.类名”) ------->粒度:粗粒度 可以匹配多个类
3.@execution("返回值类型 包名.类名.方法名(参数列表)-------> 细粒度:方法参数级别
4.@annotation(“包名.类名”) ------->细粒度:按照注解匹配

package com.jt.aop;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

@Aspect
@Component//交给spring容器管理
public class CacheAOP {
//@Pointcut(“bean(itemCatServiceImpl)”)
//@Pointcut(“within(com.jt.service.ItemCatServiceImpl)”)
//@Pointcut(“within(com.jt.service.)")//.一级包目录,…所有子孙后代
@Pointcut("execution(
com.jt.service….add(…))”)
public void pointCut(){

}@Before("pointCut()")
public void before(){System.out.println("我是before通知");
}

}

一篇了解什么是Spring AOP相关推荐

  1. Spring入门篇——第6章 Spring AOP的API介绍

    第6章 Spring AOP的API介绍 主要介绍Spring AOP中常用的API. 6-1 Spring AOP API的Pointcut.advice概念及应用 映射方法是sa开头的所有方法 如 ...

  2. springboot异步和切面_SpringBoot强化篇(八)-- Spring AOP

    Spring AOP简介 AOP(Aspect Orient Programming)是一种设计思想,是软件设计领域中的面向切面编程,它是面向对象编程(OOP)的一种补充和完善.它以通过预编译方式和运 ...

  3. 从代理机制到Spring AOP,这篇给你安排的明明白白的

    这篇文章准备从Java的代理机制讲到Spring的AOP. 1.代理模式 代理模式是很常见的一种设计模式,代理一词拆开来看就是代为受理,那显然是要涉及到请求被代理的委托方,提供代理的代理方,以及想要通 ...

  4. Spring AOP源码分析(六)Spring AOP配置的背后

    本篇文章主要对Spring AOP配置背后进行了哪些事情做下说明.还是如上类似的工程,在xml中AOP拦截配置如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 < ...

  5. 从代理机制到Spring AOP

    这篇文章准备从Java的代理机制讲到Spring的AOP. 1.代理模式 代理模式是很常见的一种设计模式,代理一词拆开来看就是代为受理,那显然是要涉及到请求被代理的委托方,提供代理的代理方,以及想要通 ...

  6. Spring AOP(获取入参和返回值)及其原理:动态代理

    此篇会先演示Spring AOP(获取入参和返回值),之后再演示AOP的原理:动态代理. Spring AOP: AOP思想: AOP(Aspect Oriented Programming),即面向 ...

  7. springaop事务逻辑原理_搞懂Spring AOP,这一篇就够了

    看了这篇文章,如果你还是不会用AOP来写程序,请你打我!! =.=||| 引言 Spring AOP是一个对AOP原理的一种实现方式,另外还有其他的AOP实现如AspectJ等. AOP意为面向切面编 ...

  8. Java框架篇---spring aop两种配置方式

    Java框架篇---spring aop两种配置方式 第一种:注解配置AOP 注解配置AOP(使用 AspectJ 类库实现的),大致分为三步:  1. 使用注解@Aspect来定义一个切面,在切面中 ...

  9. 第12章 Spring AOP之扩展篇

    第12章 Spring AOP之扩展篇 本章内容 有关公开当前调用的代理对象的探讨 有关公开当前调用的代理对象的探讨 注:有关公开当前调用的代理对象的探讨这句话很机械,可以这么理解:把当前目标对象所依 ...

最新文章

  1. 活动目录系列之三---域控制器常规卸域
  2. Metasploit irb命令使用技巧
  3. 将solr安装到tomcat里
  4. mysql 一致性读_mysql/mariadb知识点总结(27):一致性读,快照读
  5. mysql数据库实现主从复制
  6. android studio lambda插件,Android Studio Lambda插件(gradle-retrolambda)安装
  7. Jconsole查看Weblogic自定义MBean
  8. idea 使用maven 整合ssm框架
  9. 互联网创业原则与创业模式attilax大总结
  10. Unity汉化字段重命名Inspector中字段属性时显示错位及其解决办法——Unity常见问题
  11. html5 语音直播,一种基于HTML5浏览器的音视频直播方法与流程
  12. 海军领域搜狗细胞词库
  13. #今日论文推荐#罗格斯大学王灏:保持孩子般的好奇心
  14. mysql操作基础知识
  15. python网络安全协议_如果你不遵守Python中TCP和UDP等网络编程协议!那么你会自食其果...
  16. 学习Python的第四天
  17. 96Boards MIPI CSI Camera Mezzanine
  18. 多传感器融合综述---FOV与BEV
  19. scara 机器人三四轴机械结构
  20. app界面设计是什么?需要学习什么UI软件

热门文章

  1. java httprequest选项_java 实现HttpRequest 发送http请求
  2. MYSQL Too many connections错误的解决办法
  3. HTML5新属性 Canves的整体学习
  4. android studio 横幅,有关 android studio notification 横幅弹出的功能没有反应
  5. php限制注册频率,php如何限制某个ip提交的次数
  6. hypertrm超级终端_win7电脑怎么添加windows超级终端
  7. php dio获取串口数据,flutter通过dio读取二进制数据,比如通过api接口读取图片
  8. python查找指定文件夹_python实现在目录中查找指定文件的方法
  9. php 异步进度条,PHP学习:PHP+Ajax异步带进度条上传文件实例
  10. java数组复制_Java自学-数组 复制数组