4.1 Spring AOP简介
Spring中有一个关键的组件—AOP框架,然而Spring IoC容器并不依赖AOP。也就是说可以不用AOP,AOP只是对项目分层和解耦更加明确、细致。
4.1.1 Spring AOP是什么
AOP(Aspect Oriented Programing,面向切面编程)可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。OOP主要引入封装、继承和多态性等概念来建立一种对象层次结构,是模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP并不能完全解决这个问题,也就是说,OOP允许从上到下的关系,不适用于从左到右的关系。
而AOP技术和OOP技术恰恰相反,AOP利用一种称为横切的技术,剖解开封装对象的内部,将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为Aspect,即切面。简单地说,就是将那些与业务无关,却被业务模块共同调用的逻辑或责任封装起来,便于降低模块间的耦合度,减少系统的重复代码,并有利于以后的可操作性和可维护性。
简单地说,AOP表示面向切面编程,是面向对象编程的重要组成部分,用来处理所有模块的共同逻辑,在不改变原有业务逻辑的基础上,扩展横切逻辑。
4.1.2 Spring AOP的基本概念
简单了解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的使用场景
了解了AOP在项目中所起的作用后,下面介绍Spring AOP适用的项目场景。Spring AOP的使用场景包括权限,缓存,错误处理,内容传递,调试,日志记录、跟踪、优化、校准,懒加载,性能优化,同步,持久化,资源池,事务等。
4.1.4 Spring AOP的使用步骤
下面简单介绍Spring AOP的使用步骤。
(1)导入依赖jar包,包括aspectjweaver.jar、aspectjrt.jar、spring-aop.jar。
(2)编写切面类,代码如下:
(3)配置文件。新建application-aop.xml,在配置文件中扫描包,识别切面的注解,代码如下: