Spring的AOP的简介
Spring基于AspectJ框架的AOP的开发
AOP其实有一些类似一个对于方法或者类的拦截器,调用方法的时候,都需要经过这个拦截器,需不需要在执行这个方法之前或者之后做点什么的,完成了这些操作之后,再去执行相关的方法。
AOP开发中的术语
-
连接点(Joinpoint)
可以被拦截到的点,比如一个Dao类中的增删改查方法都可以被拦截,这些方法就可以称之为连接点。
Spirng仅支持对方法的连接点。
-
切入点(Pointcut)
真正被拦截到的点,比如在开发中,只对save方法(连接点)进行了增强,那么save方法就可以被称为切入点。
-
增强 / 通知(Advice)(方法层面的增强)
现在对save方法进行权限检验,那么进行权限校验(checkPri)的方法称为是通知,也就是动态添加的那一段代码。
-
引入 / 引介(introduction)(类层面的增强)
允许我们增强类,可以动态的向类中添加新的属性或者新的方法,或者添加接口的实现逻辑,让业务类变成该接口的实现类。也就是一种针对类的特殊增强
-
目标(target)
被增强的对象,也就是引入中的被增强的类,也就是被通知的对象。这样类可以专注于业务本身的逻辑。真正的业务逻辑,可以通过增强来织入
-
织入(weaving)
将通知(Advice)应用到目标(target)的过程,也就是将权限校验(checkPri)的方法的代码应用到UserDao的save方法上的过程。
Spring使用的是,动态代理织入方式:在运行期为目标类添加增强生成子类的方式。
-
代理(proxy)
被织入增强后的类。也就是相当于被包装过后,融合了原类和增强逻辑的代理类,产生的代理对象
-
切面(Aspect)
切面是多个通知和多个切入点的结合。通知说明了干什么和什么时候干(什么时候通过方法名中的before,after,around等就能知道),而切入点说明了在哪干(指定到底是哪个方法),这就是一个完整的切面定义。
详细的图解:
引入AOP的JAR包和约束
要使用Spring 的AOP功能,除了引入四个基本包和两个日志包,还需要引入两个AOP的jar包:
spring-aop-5.1.5.RELEASE
spring-aspects-5.1.5.RELEASE
引入AOP约束(AOP schema):
在applicationContext.xml 配置文件中,也需要和使用context标签一样,需要引入aop的约束。
需要在beans标签中加入三行代码约束:
xmlns:aop=“http://www.springframework.org/schema/aop”
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
applicationContext.xml的beans标签:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">