![Spring MVC+MyBatis开发从入门到项目实践(超值版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/459/34061459/b_34061459.jpg)
4.1 Spring AOP简介
Spring中有一个关键的组件—AOP框架,然而Spring IoC容器并不依赖AOP。也就是说可以不用AOP,AOP只是对项目分层和解耦更加明确、细致。
4.1.1 Spring AOP是什么
![](https://epubservercos.yuewen.com/20FD4C/18225432008786906/epubprivate/OEBPS/Images/Figure-P72_14181.jpg?sign=1739415769-NBBGhg3lEUcXaumkUfGDnj9FZ54XzNxJ-0-129c8780f10c4d8d0af6f7ffe07494f7)
AOP(Aspect Oriented Programing,面向切面编程)可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。OOP主要引入封装、继承和多态性等概念来建立一种对象层次结构,是模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP并不能完全解决这个问题,也就是说,OOP允许从上到下的关系,不适用于从左到右的关系。
而AOP技术和OOP技术恰恰相反,AOP利用一种称为横切的技术,剖解开封装对象的内部,将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为Aspect,即切面。简单地说,就是将那些与业务无关,却被业务模块共同调用的逻辑或责任封装起来,便于降低模块间的耦合度,减少系统的重复代码,并有利于以后的可操作性和可维护性。
简单地说,AOP表示面向切面编程,是面向对象编程的重要组成部分,用来处理所有模块的共同逻辑,在不改变原有业务逻辑的基础上,扩展横切逻辑。
4.1.2 Spring AOP的基本概念
![](https://epubservercos.yuewen.com/20FD4C/18225432008786906/epubprivate/OEBPS/Images/Figure-P73_14278.jpg?sign=1739415769-TIkngqiHUin5fkd3qVnKNbSuqddapBDk-0-755572e1c12310912cf8c2c918f0e722)
简单了解Spring AOP在Spring框架中扮演的角色之后,我们需要了解Spring AOP的基本概念。
(1)连接点:所有可以被增强(代理)的方法,程序执行过程中明确的点,一般是方法的调用。
(2)切点:已经被或即将被增强的方法,就是带有通知的连接点,在程序中主要体现为书写切点表达式。
(3)通知:AOP在特定的切点上执行的增强处理,有before、after、afterReturning、afterThrowing、around。
(4)目标对象:被代理的对象。
(5)代理对象:对目标对象的切点应用通知后生成的对象。
(6)织入:将通知应用到切点的过程,或者说生成代理对象的过程。
(7)切面:通常是一个类,切点+通知称为切面。
(8)AOP代理:AOP框架创建的对象,代理就是目标对象的加强。Spring中的AOP代理可以是JDK动态代理,也可以是CGLIB代理,前者基于接口,后者基于子类。
4.1.3 Spring AOP的使用场景
![](https://epubservercos.yuewen.com/20FD4C/18225432008786906/epubprivate/OEBPS/Images/Figure-P73_14279.jpg?sign=1739415769-CZc9Xsv7f8GZmFeQSq1hMNk9V857STCd-0-c3218ab2e1ae63e64fbc8a02b25a3556)
了解了AOP在项目中所起的作用后,下面介绍Spring AOP适用的项目场景。Spring AOP的使用场景包括权限,缓存,错误处理,内容传递,调试,日志记录、跟踪、优化、校准,懒加载,性能优化,同步,持久化,资源池,事务等。
4.1.4 Spring AOP的使用步骤
![](https://epubservercos.yuewen.com/20FD4C/18225432008786906/epubprivate/OEBPS/Images/Figure-P73_14280.jpg?sign=1739415769-vZYDPcXbegmgEAnrC4BjJDI9Gv683qkN-0-1577aa70cef738683e6095b752d63b4d)
下面简单介绍Spring AOP的使用步骤。
(1)导入依赖jar包,包括aspectjweaver.jar、aspectjrt.jar、spring-aop.jar。
(2)编写切面类,代码如下:
![](https://epubservercos.yuewen.com/20FD4C/18225432008786906/epubprivate/OEBPS/Images/Figure-P73_55434.jpg?sign=1739415769-HeoX8hNVszLEJMR1xqxkzYcO2mf9WrHU-0-5d3cf4b20ea336aa478de1832924f31e)
(3)配置文件。新建application-aop.xml,在配置文件中扫描包,识别切面的注解,代码如下:
![](https://epubservercos.yuewen.com/20FD4C/18225432008786906/epubprivate/OEBPS/Images/Figure-P73_55435.jpg?sign=1739415769-x2zsaOaTrqcHr0swUeMpHMsTgNWiM5Vb-0-b5b2b53cdc1e9b2af1747c2c37e07fd6)