🌈键盘敲烂,年薪30万🌈
目录
[① AOP核心思想思想:](#① AOP核心思想思想:)
[② AOP专业术语:](#② AOP专业术语:)
[① 语法格式](#① 语法格式)
一、AOP相关概念
① AOP核心思想思想:
- 无侵入式的功能增强
② AOP专业术语:
- 连接点:原始方法
- 切入点表达式:匹配连接点的式子(要追加功能的方法)
- 通知:追加的功能
- 切面:绑定通知和切入点
二、AOP快速如入门
AOP入门案例(基于注解 )
分析:
1.导入依赖坐标
2.制作连接点(数据层的方法)
3.定义切入点表达式
4.绑定切入点与通知关系(切面)
定义通知类:
java
@Component
@Aspect
public class MyAdvice {
// 定义切入点表达式
@Pointcut("execution(void itpan.dao.impl.BookDaoImpl.update())")
public void pt(){}
// 定义通知和绑定关系
@Before("pt()")
public void method(){
System.out.println(System.currentTimeMillis());
}
}
加入支持AOP的注解
java
@Configuration
@ComponentScan("itpan")
@EnableAspectJAutoProxy // 告诉spring 程序有基于注解开发的AOP
public class SpringConfig {
}
三、AOP工作流程
四、切入点表达式
① 语法格式
- 标准格式:动作关键字(访问修饰符 返回值 包名.类名或接口名.方法名(参数) 异常名)
- 例如:execution(public User com.itpan.service.BookService.findById(int))
②支持通配符
.. 任意
* 任意一个
③书写技巧
- 权限修饰符一般为public 可省略 private不要省略
- 包名书写尽量不要使用.. 常用*或精准匹配
- 接口名/类名等通用名称使用*匹配 例如UserService 使用*Service
- 方法名动词精准匹配,名词*匹配 例如getById 使用getBy*
五、通知类型
①⭐环绕通知⭐
注意:
返回值类型为Object
补充:
前置通知 @Before
后置通知 @After
运行成功后通知 @AfterReturning
抛出异常后通知 @AfterThrowing
六、获取切入点参数
环绕通知:ProceedingJoinPoing中getArgs()
其他通知:JoinPoint中getArgs()方法
注意:ProceedingJoinPoing与JoinPoint必须式方法中的第一个参数