文章目录
1. Spring中的可插拔组件技术
这些软件模块像横切面一样穿插在了原始软件的运行过程中,为原始的代码提供了额外的扩展。可以理解为插件,所以这项技术称之为面向切面编程技术。
2. Spring AOP
- Spring AOP – Aspect Oriented Programming 面向切面编程
- AOP的做法是将通用的、与业务无关的功能抽象封装为切面类,再通过配置的形式加入我们当前的系统中。
- 这些切面类可以配置在目标方法的执行前、后运行,真正做到即插即用。
- 终极目的:在不修改源码的情况下对程序行为进行扩展。
3. Spring AOP与AspectJ的关系
- Eclipse AspectJ,一种基于Java平台的面向切面编程的语言
- Spring AOP使用AspectJWeaver实现类与方法的匹配。
- Spring AOP利用代理模式实现对象运行时功能扩展。(运行目标类进行扩展的时候的运行模块)
4. 几个关键概念
注解 | 说明 |
---|---|
Aspect | 切面,具体的可插拔组件功能类,通常一个切面只实现一个通用功能 |
Target Class / Method | 目标类、目标方法,指真正要执行与业务相关的方法 |
PointCut | 切入点,使用execution表达式说明切面要作用在系统的那些类上 |
JoinPoint | 连接点,切面运行过程中是包含了目标类/方法元数据的对象 |
Advice | 通知,说明具体的切面的执行时机,Spring包含了五种不同类型通知 |
5. AOP 配置过程
- 依赖AspectJ
- 实现切面类和方法
- 配置Aspect Bean(和普通IoC类的配置过程相同)
- 定义PointCut(用于决定这个切面作用于系统的那些类的那些方法上)
- 配置Advice通知
6. JoinPoint 核心方法
注解 | 说明 |
---|---|
Object getTarget() | 获取IoC容器内目标对象 |
Signature getSignature() | 获取目标方法 |
Object[] get Args() | 获取目标方法参数 |
7. PointCut 切点表达式
这个execution表达式的意思是去匹配com.imooc下的所有类的所有公用方法。publilc可省略
8.五种通知类型
注解 | 说明 |
---|---|
Before Advice | 前置通知,目标方法运行前执行 |
After Returning Advice | 返回后通知,目标方法返回数据后执行(返回成功执行) |
After Throwing Advice | 异常通知,目标方法抛出异常后执行(返回出现异常执行) |
After Advice | 后置通知,目标方法运行后执行(不管返回成功或失败都会执行) |
Around Advice | 最强大通知,自定义通知执行时机,可决定目标方法是否运行 |
返回后通知和后置通知及异常通知的执行顺序和我们xml文件中配置的顺序是一致的。
9. 特殊的“通知” --引介增强
- 引介增强(IntroductionInterceptor) 是对类的增强,而非方法,本质是一个拦截器。其他五种通知都是执行在方法上
- 引介增强允许在运行时为目标类增加新属性或方法。
- 引介增强允许在运行时改变类的行为,让类随运行环境动态变更。