AOP
面向切面编程,也可称为面向方面编程,是一种编程规范,提供从另一个角度来考虑程序结构从而完善面向对象编程(oop)
在进行oop开发时,都是基于对组件进行开发,然后对组件进行组合,oop最大问题就是无法解耦组件进行开发
AOP为开发者提供一种进行横切关注点,分离并织入的机制,把关横切关注点分离,然后织入到系统中,从而无耦合的完成了我们的功能
AOP能干什么:
- 用于横切关注点的分离和织入横切关注点到系统
- 完善oop
- 降低组件和模块之间的耦合性
- 使系统容易扩展
- 而且由于关注点分离从而可以获得组件的更好复用
- 关注点
【AOP】可以认为是任何东西,比如日志组件
- 关注点分离
将问题细化从而单独部分,既可以理解为不可再分割的组件。
- 横切关注点
一个组件无法完成需要的功能,需要其他组件协助完成,如日志组件,横切于支付组件。
横切关注点可能包含很多,比如非业务的:日志,事务处理,缓存,性能统计,权限控制等等这些非业务的基础功能,还可能是业务,如某个业务组件横切于多个模块
- 织入
横切关注点分离后,需要通过某种技术将横切关注点融合到系统中从而完成需要的功能,因此需要织入,织入可能在编译期,加载期,运行期等进行。
- 连接点(Joinpoint)
表示需要在程序中插入横切关注点的扩展点,Spring只支持方法执行连接点,在AOP中表示“在哪里干”。
- 切入点(Pointcut)
选择一组相关连接点的模式,即可以认为连接点的集合,Spring支持perl5正则表达式和Aspect切入点模式,Spring默认使用Aspect语法,在AOP中表示“在哪里干的集合”
- 通知(Advice)
在连接点上执行的行为,通知提供了在AOP中需要在切入点所选择的连接点处进行扩展现有行为的手段,包括前置通知(before advice),后置通知(after advice),环绕通知(around advice),在AOP中表示为“干什么”
- 方面/切面(Aspect)
横切关注点的模块化,在AOP中表示为“在哪干和干什么集合”
切面=切入点+通知
- 目标对象(Target Object)
需要被织入横切关注点的对象,在AOP中表示为“对谁干”
- 织入(Weaving)
织入是一个过程,是将切面应用到目标对象从而创建出AOP代理对象的过程,织入可以在编译期,类装载期,运行期进行。
- AOP代理(AOP Proxy)
AOP框架使用代理模式创建的对象,从而实现在连接点处插入通知(即应用切面),就是通过代理来对目标对象应用切面。在Spring中,AOP代理可以用JDK动态代理或CGLIB代理实现,而通过拦截器模型应用到切面。
- AOP代理(AOP Proxy)
- Advice分类
前置通知(Before Advice):在切入点选择的连接点处的方法之前执行的通知
后置通知(After Advice): 在切入点选择的连接点处的方法之后执行的通知
环绕通知(Around Advices):环绕着在切入点选择的连接点处的方法所执行的通知
- execution表达式
execution表达式是切入点(PointCut)中使用的一种模式,比如
execution(* com.sample.service.impl..*.*(..))
第一个号:表示返回类型,号表示所有的类型。
包名:表示需要拦截的包名,后面的两个句点表示当前包和当前包的所有子包,com.sample.service.impl包、子孙包下所有类的方法。
第二个号:表示类名,号表示所有的类。
(..):最后这个星号表示方法名,号表示所有的方法,后面括弧里面表示方法的参数,两个句点表示任何参数。
示例:
定义业务类
文章图片
? 定义切面
文章图片
? 配置
文章图片
文章图片
测试
文章图片
@Aspect Spring除了支持Schema方式配置AOP,还支持注解方式:使用@AspectJ风格的切面声明
启用对@Aspect的支持声明切面,@Aspect声明切入点org.aspectj.lang.annotation包下的,@Pointcut(value=https://www.it610.com/article/“execution表达式”)。
声明通知
org.aspectj.lang.annotation 包下的
@Before(value = "https://www.it610.com/article/切入点表达式或命名切入点")
@After(value = "https://www.it610.com/article/切入点表达式或命名切入点")
@Around(value = "https://www.it610.com/article/切入点表达式或命名切入点")
示例:
定义业务类
文章图片
定义切面
文章图片
配置
文章图片
测试
文章图片