品牌型号:联想ThinkPad X1
系统:Windows10家庭版
软件版本:Spring 5.3.7
Java开发的小伙伴们在刚接触Spring框架一段时间后,肯定都听说过Spring AOP这个词汇,跟着网上视频学做项目优化、解耦的时候,前辈们总会提到用AOP来简化代码,这时候很多Java开发新手就困惑了,到底什么是Spring AOP?它跟我们平时写的业务代码有啥关系?当然,有些伙伴可能知道什么是Spring AOP但是却不知道Spring的AOP的切面是什么意思,能起到什么作用。今天,我们就从“什么是Spring AOP,Spring的AOP的切面是什么意思”这两个问题开始讲解,希望能帮助大家真正弄懂并学会Spring的核心特征。
一、什么是Spring AOP
我们在项目开发的时候经常要加入日志记录、权限校验或者是性能监控等业务逻辑,在没有AOP之前,我们可能要给项目中好多个service方法重复加入日志、事务等重复代码。

这样写代码太麻烦了,而且核心逻辑和通用逻辑代码混在一起,可读性变得很差,业务代码直接被污染了,然后过几个月再来看代码,维护起来简直天塌了。说个最简单的例子,突然有一天要求修改日志格式,那要修改的地方非常多,而且还很容易出错。而Spring AOP说的简单点,就是在不修改原有业务代码的情况下,将通用功能抽取成独立模块然后织入到业务方法中。

说到AOP我们就不得不说到OOP面向对象编程了,AOP是OOP的补充和完善,而Spring AOP是对AOP思想的具体实现,使用Spring AOP不需要我们手动去编写复杂的AOP底层代码,只需要通过一些简单的API、注解就可以轻松实现通用功能和业务逻辑分离,而且比较好的是使用AOP结合Spring的ioc能帮我们有效降低代码耦合度。
二、Spring的AOP的切面是什么意思
刚刚我们有说到Spring的AOP以及AOP思想,那么Spring AOP思想具体是怎么实现的呢?这里用到了动态代理技术,在我们软件运行期间,利用动态代理可以对目标对象的方法进行增强,代理对象同名方法内我们可以在执行原有逻辑的同时嵌入增强逻辑或者其他对象的方法。理解了Spring AOP的具体实现后,我们再来看切面就很容易了。

Spring AOP的切面说白了是用来封装通用功能的载体,我们之前提到的例如日志记录等通用功能,可以把它封装成一个切面类,这个切面类里专门处理日志相关的操作。然后通过切点表达式将这个切面织入到业务代码中,这个过程就是“织入”。

如果从技术的角度,切面是包含了通知和切入点的类,通知定义了要做什么事情,也就是我们抽取出来的通用逻辑,例如日志记录。切入点呢就是说在什么时候在哪里做这件事情,两者一结合就是一个切面了。
以上就是什么是Spring AOP,Spring的AOP的切面是什么意思的全部内容了。在没有AOP之前,我们在做日志记录、事务处理等业务的时候,可能要写很多重复代码,并且耦合度过高不利于后期的维护,但是我们可以把这些业务逻辑抽取出来,然后使用Spring AOP织入到业务逻辑中。Spring AOP的切面其实是一个包含了通知和切入点的类,这个切面类中定义了在什么时候、什么地方、做什么事情。