AOP 的概念、名词解释、实现原理、常用场景
AOP(面向切面编程)
概念:将一批具备逻辑相关性的类视作一个切面,并以切面为单位,添加功能;通常用于实现具备横切性质的系统级服务。
实现原理
- 代理模式
- 分为动态代理与静态代理
- 静态代理:两个实现类A,B,实现一个接口C,B代理A来实现C(运行流程上来说A实现C时要通过B才能实现C,而B发给C的内容不全是A或者全不是A的内容,而是B的内容。及是静态代理)
- 动态代理
通过invocationHandler实现方法拦截加入代理功能
通过Proxy类创建动态代理实例
当调用生成的代理实例时,会被invocationHandler的方法拦截,方法实现就是代理的内容
常用场景 - 权限管理
- 打印日志
- 系统性能检测
- 缓存优化
- 事务管理
名词解释 - 连接点 JoinPoint : 可以被切入的点,通常是方法。连接点对象描述了当前连接点的信息,比如,目标对象、方法信息、参数等等
- 通知 Advice : 需要向切面加入的功能
- 引入 Introduction: 对目标对象添加方法和属性
- 切面 Aspect : 将切面模块化,包含了要切入的功能,切入点等等
- 目标对象 Target: 切面通知的对象
- 代理 Proxy : AOP的一种实现方式
- 织入 Weaving: 将切面应用到目标对象的过程
- 切入点 PointCut : 需要织入通知的连接点,通常用SPEL描述
具体实现名词–及是配置完后的操作(通知)
- 通知 (SpringBean)
- 前 before JoinPoint
- 后 after JoinPoint
- 环绕 around ProceedingJoinPoint
- 异常 after-throwing
- 返回 after-returning