【Spring 从0开始】AOP 操作中的相关术语、环境准备

简介: 【Spring 从0开始】AOP 操作中的相关术语、环境准备

一、常用术语


在后续使用 AOP 中会用到几个专业术语:连接点、切入点、通知(增强)、切面。

分别是什么意思?


来看这里有个 User 类,里面有增删改查 4 个方法。


public class User {
    public void add() {}
    public void delete() {}
    public void update() {}
    public void select() {}
}


以此辅助说明一下上述 4 个术语:


  • 连接点:类中可以被增强的方法,就叫做连接点。比如上面的 4 个方法都可以被增强,都可以称为连接点。
  • 切入点:实际被真正增强的方法,称为切入点。比如上面的 4 个方法,只增强了 add() 方法,这个就是切入点。
  • 通知(增强):实际上增强的逻辑部分,称为通知。比如我给方法增加了日志的输出处理,那这部分逻辑就称为通知或者增强。
  • 切面:把通知(增强)应用到切入点的过程,就叫切面,指的是一个动作。

其中,关于通知(增强),有 5 种类型:


  • 前置通知:被增强的方法之前执行。
  • 后置通知:被增强的方法之后执行。
  • 环绕通知:被增强的方法前后都执行。
  • 异常通知:被增强的方法出现异常时执行。
  • 最终通知:不管被增强的方法有没有异常都会执行。


二、准备工作


Spring 框架一般基于 AspectJ 实现 AOP 操作。


AspectJ 是一个独立的框架,不是 Spring 的组成部分。为了便捷,把二者结合起来使用。


那么基于 AspectJ 实现 AOP,可以有 2 种方式:


  • 基于 xml 配置文件
  • 基于注解方式。


一般为了便捷,使用注解方式。


1. 引入依赖


需要 jar 包如下:


1268169-20210803224016723-1467568891.png


2. 切入点表达式


作用是:知道要对哪个类里面的哪个方法进行增强。


结构:


execution([权限修饰符][返回类型][类全路径][方法名称]([参数列表]))


比如,我有个类 User 在 package com.pingguo.spring5.dao;里。


(1)示例1


我要增强这个类下面的 add() 方法,表达式这么写:


execution(* com.pingguo.spring5.User.add(..))


*号:代表所有类型的修饰符。

  • 返回类型:可以不写
  • 类全路径:com.pingguo.spring5
  • 方法:前面加 .add()
  • 参数:括号里的 .. 表示方法中的参数


(2)示例2


我要增强这个类下面的所有方法,表达式这么写:


execution(* com.pingguo.spring5.User.*(..))


这里就是把方法用 * 号替换掉。


(3)示例3


我要增强包com.pingguo.spring5下的所有类的所有方法:


execution(* com.pingguo.spring5.*.*(..))


仍然是用*替换对应的地方。

相关文章
|
1月前
|
监控 Java 开发者
Spring AOP动态代理
Spring AOP动态代理
40 1
|
1月前
|
Java Spring 容器
Spring的AOP失效场景详解
Spring的AOP失效场景详解
88 0
|
22天前
|
设计模式 Java Maven
Spring Aop 底层责任链思路实现-springaopdi-ceng-ze-ren-lian-si-lu-shi-xian
Spring Aop 底层责任链思路实现-springaopdi-ceng-ze-ren-lian-si-lu-shi-xian
31 1
|
2月前
|
XML Java 数据格式
5个点轻松搞定Spring AOP底层实现原理
AOP 也是 Spring 中一个较为重要的内容,相对于传统的 OOP 模式,AOP 有很多让人难以理解的地方,本篇文章将向大家介绍 AOP 的实现方法及其底层实现,内容包括:
44 1
|
15天前
|
XML Java Maven
Spring之Aop的注解使用
Spring之Aop的注解使用
|
21天前
|
Java Spring
Spring 如何实现 AOP
Spring 如何实现 AOP
17 0
|
30天前
|
Java 编译器 程序员
Spring AOP 和 AspectJ 的比较
Spring AOP 和 AspectJ 的比较
34 0
|
1月前
|
Java Spring
【spring(三)】AOP总结
【spring(三)】AOP总结
|
1月前
|
SQL NoSQL Java
【七】springboot整合AOP实现日志操作
【七】springboot整合AOP实现日志操作
41 0
|
1月前
|
Java 开发者 Spring
Spring AOP精讲
Spring AOP精讲
24 0