【spring(三)】AOP总结

🌈键盘敲烂,年薪30万🌈

目录

一、AOP相关概念

[① AOP核心思想思想:](#① AOP核心思想思想:)

[② 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必须式方法中的第一个参数

相关推荐
XiaoLeisj32 分钟前
【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题
java·开发语言·java-ee
paopaokaka_luck34 分钟前
【360】基于springboot的志愿服务管理系统
java·spring boot·后端·spring·毕业设计
dayouziei34 分钟前
java的类加载机制的学习
java·学习
码农小旋风2 小时前
详解K8S--声明式API
后端
Peter_chq2 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
Yaml43 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
小小小妮子~3 小时前
Spring Boot详解:从入门到精通
java·spring boot·后端
hong1616883 小时前
Spring Boot中实现多数据源连接和切换的方案
java·spring boot·后端
aloha_7893 小时前
从零记录搭建一个干净的mybatis环境
java·笔记·spring·spring cloud·maven·mybatis·springboot
记录成长java4 小时前
ServletContext,Cookie,HttpSession的使用
java·开发语言·servlet