脚本宝典收集整理的这篇文章主要介绍了AOP,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
面向切面编程,也可称为面向方面编程,是一种编程规范,提供从另一个角度来考虑程序结构从而完善面向对象编程(oop)
在进行oop开发时,都是基于对组件进行开发,然后对组件进行组合,oop最大问题就是无法解耦组件进行开发
AOP为开发者提供一种进行横切关注点,分离并织入的机制,把关横切关注点分离,然后织入到系统中,从而无耦合的完成了我们的功能
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代理实现,而通过拦截器模型应用到切面。
Advice分类 前置通知(Before Advice):在切入点选择的连接点处的方法之前执行的通知 后置通知(After Advice): 在切入点选择的连接点处的方法之后执行的通知 环绕通知(Around Advices):环绕着在切入点选择的连接点处的方法所执行的通知
execution表达式
execution表达式是切入点(PointCut)中使用的一种模式,比如
execution(* com.sample.service.impl..*.*(..))
第一个号:表示返回类型,号表示所有的类型。 包名:表示需要拦截的包名,后面的两个句点表示当前包和当前包的所有子包,com.sample.service.impl包、子孙包下所有类的方法。 第二个号:表示类名,号表示所有的类。 (..):最后这个星号表示方法名,号表示所有的方法,后面括弧里面表示方法的参数,两个句点表示任何参数。
示例:
定义业务类
定义切面
配置
测试
Spring除了支持Schema方式配置AOP,还支持注解方式:使用@AspectJ风格的切面声明 启用对@Aspect的支持声明切面,@Aspect声明切入点org.aspectj.lang.annotation包下的,@Pointcut(value=“execution表达式”)。
声明通知 org.aspectj.lang.annotation 包下的 @Before(value = "切入点表达式或命名切入点") @After(value = "切入点表达式或命名切入点") @Around(value = "切入点表达式或命名切入点")
示例:
定义业务类
定义切面
配置
测试
以上是脚本宝典为你收集整理的AOP全部内容,希望文章能够帮你解决AOP所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。