Java程序员必会的Spring AOP在实际项目中的应用

本文通过一个具体案例介绍了如何利用Spring AOP实现操作日志记录功能。采用自定义注解定义切入点,通过切面类实现前置通知,自动记录接口的执行时间和执行人等信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很久没有用过Java的AOP,最近接触到了一个需求,恰好可以用AOP的思想来实现,就此总结一下。

目录

AOP简介

① pointcut(切入点)

② advice(通知)

③ aspect(切面)

AOP作用

常见用法

AOP的实际应用

两种实现方式

一、使用自定义注解,定义pointCut

二、实现advice(通知),用切面类来拦截处理被注解的方法并获取注解中的内容

三、在原有controller方法上加上注解

四、请求该方法,查看操作日志


AOP简介

AOP,即Aspect Oriented Programming,直接翻译过来的意思是“面向侧面的程序设计”,更常见的说法是“面向切面编程”,是Spring的三大核心思想之一(两外两个:IOC-控制反转、DI-依赖注入)。

关于AOP的概念这里不做过多介绍,我们只需要知道其中有三个非常重要的概念:

aspect(切面)、pointcut(切入点)、advice(通知)。

我们分别来看看这三者是什么意思。

① pointcut(切入点)

也就是具体拦截的某个业务点。

分为 execution(路径表达式)和 annotation 方式,被这两种方式修饰的代码将会被切面拦截处理。

切点和连接点有什么区别?

Joint point:连接点,是程序执行的一个点。例如,一个方法的执行或者一个异常的处理。在 Spring AOP 中,一个连接点总是代表一个方法执行。

advice(通知)

切面当中的处理方式,声明通知方法在业务层的执行位置,类型如下:

@Before:前置通知,在方法执行之前执行
@After:后置通知,在方法执行之后执行
@AfterRunning:返回通知,在方法返回结果后执行
@AfterThrowing:异常通知,在方法执行异常后执行
@Around:环绕通知,可以替代上述通知方法,并且可以控制方法是否执行以及何时执行

Spring AOP中的通知方法,用到了动态代理,动态代理主要有两种方式:JDK动态代理和CGLIB动态代理,关于动态代理的详细说明,可以参考这里,以及实现原理

aspect(切面)

即 pointcut+ advice ,和拦截器(HandlerInterceptorAdapter)的作用并没有太大的区别,只是两者的作用域不同,相对而言,切面的作用域更灵活一些。两者之间的区别可以参考这里

AOP作用

如果说MVC的三层架构是Java的纵向编程思想,那AOP可以说是横向编程思想,能够让我们在不影响软件原有功能上,横向拓展新功能。

AOP组成

常见的用法有:

  • 性能监控:在方法调用前后记录调用时间,方法执行太长或超时报警
  • 缓存代理:缓存某方法的返回值,下次执行该方法时,直接从缓存里获取
  • 软件破解:使用AOP修改软件的验证类的判断逻辑
  • 记录日志:在方法执行前后记录系统日志
  • 工作流系统:工作流系统需要将业务代码和流程引擎代码混合在一起执行,那么我们可以使用AOP将其分离,并动态挂接业务
  • 权限验证:方法执行前验证是否有权限执行当前方法,没有则抛出没有权限执行异常,由业务代码捕捉
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值