AOP 简介

  AOP (Aspect Oriented Programming),面向切面编程。
  面向切面的编程将程序逻辑分成不同的部分,将其称为关注点,跨一个应用程序的多个点的功能被称为横切关注点,这些横切关注点在概念上独立于应用程序的业务逻辑。

  一般我们创建 Java 工程的时候都会创建五级目录,第一级是 com,第二级是公司名,第三级是项目名,第四级是模块名,第五级是层级(实体类层、数据层、业务层、控制层)。
  其实就可以一般情况下就可以近似的理解为切面就是我们的层级,也就是控制层是一个切面,业务层是一个切面,数据层是一个切面。

  对切面这个概念有了解之后,就可以来理解面向切面的编程了。

  在进行面向切面的编程过程中,可能就会对某个切面或者某个切面的某个部分进行一些额外功能的实现,就是在某个层级中的某个方法上,在这个方法使用的时候,做一些额外的东西,做额外的事情的时机就包括使用这个方法之前,使用这个方法之后,使用这个方法的前后,使用这个方法出现了异常这四个时机,这四个时机官方称为通知 (advice),通知是直译,更好的翻译是业务增强

  业务逻辑在实现时,可以采用 AOP 方式,在无需变更原有业务功能的情况下,扩充其他的业务逻辑。
  应用场景:日志记录、事务管理、权限校验、安全性和缓存等,这些功能在原本的业务代码中都不是核心的代码,如日志记录与否并不影响程序执行。

  例如,事务管理使用 AOP 的方式,我们只需要关注最核心的 SQL 语句执行,将其他的事情交给 Spring。获取连接对象就是 SQL 执行之前,回滚事务就是 SQL 执行发生异常之后…
在这里插入图片描述
   1. JointPoint(连接点): 程序执行的某个特定位置,明确的点,一般是方法的调用,如某个方法调用前、调用后、抛出异常,这些代码中的特定点都称为连接点。
  简单来说,就是需要在哪里加入你的逻辑增强,哪里就是连接点。连接点表示具体要拦截的方法
  2. 切点(PointCut): 每个程序连接点有多个,如何定位到某个感兴趣的连接点就需要其诶单来定位。比如,连接点 —— 数据库记录,切点 —— 查询条件。
  切点是定义一个范围,比如在某个包中,而连接点是具体到某个方法。切点用于来限定 Spring AOP 启动的范围,通常采用表达式的方式来设置,关键词是范围。
  3. 增强(Advice): 增强是织入到目标类连接点上的一段程序代码。在 Spring 中,想向 BeforeAdvice 等增强还带有方位信息。
  也有的称 Advice 是通知,这是直译过来的。

  1. 前置通知:在执行业务代码之前做某些操作,比如连接对象。
  2. 后置通知:在执行业务代码之后做某些操作,无论是否发生异常都会执行,比如关闭连接对象。
  3. 异常通知:在执行业务代码后出现异常,需要做的操作,比如回滚事务。
  4. 返回通知:执行业务代码后无异常时会执行的操作。
  5. 环绕通知:前置通知,后置通知都放到一起。

  4.目标对象: 需要被加强的业务对象。
  5.织入: 织入就是将增强添加到对目标类具体连接点上的过程。织入是一个形象的说法,具体来说,就是生成代理对象并将切面内容融入到业务流程的过程。
  6.代理类: 一个类被 AOP 织入增强之后,就产生了一个代理类
  7.切面: 切面由其切点和增强组成,它既包括了横切逻辑的定义,也包括了连接点的定义,Spring AOP 就是将切面所定义的横切逻辑织入到切面所指定的连接点中。比如上面讨论的数据库事务,这个数据库事务代码贯穿了我们的整个代码,我们可就可以将这个叫做切面。Spring AOP 将切面定义的内容织入到我们的代码中,从而实现前后的控制逻辑。比如我们常写的拦截器 Intercreptor,这就是一个切面类。

在这里插入图片描述

  AOP 编程不是 Spring 独有的,Spring 只是支持 AOP 编程的框架之一,不要搞反了关系。
  AOP 分两类,一类对可以方法的参数进行拦截,一类对方法进行拦截,Spring AOP 属于后者,所以 Spring AOP 是属于方法级的。

猜你喜欢

转载自blog.csdn.net/qq_40395874/article/details/114402655