JavaEE——Spring:AOP概述及入门
1.AOP的概述
1.1.什么是AOP
AOP
:面向切面编程
,AOP是OOP的扩展和延伸,用于解决OOP开发中遇到的一些问题
1.2.AOP的应用场景
1.3.Spring底层所使用的AOP的实现原理
底层原理:动态代理
-
JDK动态代理
:只能对实现了接口的类产生代理(默认,底层会自动切换) -
cglib动态代理
(类似于Javassist第三方代理技术):对没有实现接口的类产生代理对象,生成该类的子类对象
1.3.1.JDK
没使用代理前:
使用JDK动态代理:
1.3.2.cglib
cglib:第三方开源的代码生成类库,动态添加属性和方法
没使用代理前:
使用cglib动态代理:
2.Spring的AOP开发(AspectJ的XML方式)
2.1.Spring的AOP简介
AOP思想最早由AOP联盟
组织提出,Spring是使用这种思想最好的框架
- Spring的AOP有自己的实现方式(此传统方式非常繁琐,已经弃用)
-
AspectJ
是一个非常优秀的AOP框架,所以Spring将其引入使用 - Spring中有两种AOP开发方式
2.2.AOP相关术语
- Joinpoint:连接点,可以被拦截(增强)的点
- Pointcut:切入点,真正被拦截的点
- Advice:通知、增强(方法层面的增强)
- Introduction:引介(类层面的加强)
- Target:被增强的对象,也称目标
- Weaving:织入,将通知应用到目标的过程
- Proxy:被增强以后产生的代理对象
- Aspect:切面,多个通知和多个切入点组合
2.3.Spring的AOP的入门(AspectJ的XML方式)
未使用AOP时:
- 代码:
- 配置文件:
- 测试:
使用AOP:
- 编写一个切面类:
- 配置切面类(
将切面类交给Spring
): - 通过AOP配置完成对目标类的代理:
- 测试:
2.4.Spring中的通知类型
AspectJ划分通知:
- 前置通知:在目标方法执行之前进行的操作(可以获得切入点信息)
- 后置通知:在目标方法执行之后进行的操作(可以获得切入点信息,还能获得方法返回值)
- 环绕通知:在目标方法执行之前和之后进行的操作(可以
阻止目标方法的执行
) - 异常抛出通知:程序出现异常时进行的操作(可以获得异常信息)
- 最终通知:无论代码是否有异常,总会执行(类似finally)
- 引介通知
2.5.Spring的切入点表达式写法
语法(基于execution)的函数完成的:[访问修饰符] 方法返回值 包名.类名.方法名[参数]