Spring的AOP介绍

AOP介绍

AOP是(Aspect Orient Programing)的简称,即:面向切面编程。

AOP的术语

Joinpoint:连接点,通知执行的具体位置,如方法执行前,方法后,异常抛出后等。Spring只实现了方法的AOP,所以Spring的连接点就在方法周围发生。

Advice:通知,是植入到目标连接点上的程序代码。Spring中提供的通知有 BeforeAdvice、AfterReturnAdvice、ThrowsAdvice等。从名字上看,就能看出他们发挥作用的场景。

PointCut:切点,负责定位连接点的位置,负责匹配连接点,因为每个方法都有连接点,但是哪方法的连接点上使用什么通知,需要用切点来描述。Spring中有专门的接口来对应这个概念。

Weaving:织入,将通知添加在具体的连接点上的过程。AOP有三种织入方式,编译期、类装载期、运行期,Spring采用运行期使用动态代理织入。

Aspect:切面,由切点和通知、连接点的定义。


SpringAOP

SpringAop是AOP技术在Spring中的具体实现。SpringAOP构建在IOC之上,使用动态代理技术在运行期间对类进行方法级别上做了增强。所以Spring的AOP实际上是对目标类进行了代理,通过生成目标类的代理类,并在代理类中加入了增强的通知功能,完成了切面的功能。程序实际上执行的是Spring生成的代理类。


Spring AOP创建代理类

Spring创建代理类,通过ProxyFactory 和ProxyFactoryBean创建,ProxyFactory需要使用编程的方式设置AOP,而ProxyFactoryBean可以使用配置的方式处理AOP配置。

它们的关系和BeanFactory和ApplicationContext类似。一个是编程配置,一个是xml配置。但有不相同,下面看一下它们的继承关系。

ProxyFactory和ProxyFactoryBean都实现了相同的父类,还有AspectJProxyFactory是针对Spring集成AspectJ来使用的工厂类。


Spring AOP两种代理机制

1、基于JDK动态代理。

基于反射的动态代理技术,它能通过接口创建代理实例。同时在方法调用前后加入增强逻辑。

2、基于CGLib的动态代理。

由于JDK创建代理必须要求被代理类有实现一个接口,对与没有接口的类,就没有办法生成代理类。这时Spring引入了CGLIB,它采用的字节码生成技术,直接创建目标类的子类,并在子类方法中拦截父类方法的调用,实现功能的增强。


Spring的通知类型接口

Spring集中定义了5种类型的通知。它们是

BeforeAdvice:前置通知,目标方法执行前的通知。

AfterReturnAdvice:后置通知,目标方法执行后的通知。

ThrowsAdvice:异常通知,目标方法抛出异常后的通知。

MethodInterceptor:环绕拦截器,在目标方法执行前后的通知。

IntroductionInterceptor:引介拦截器,给目标类添加新的方法和属性。

其中,MethodInterceptorIntroductionInterceptor是AOP联盟定义的接口。


Spring AOP中其他概念

Advisor:通知器,Spring使用通知器将Advice和PointCut结合起来,对应AOP切面的概念。

拦截器:Spring配置切面,调用通知的地方,实际上就是在具体方法调用时,做拦截并调用切面方法。


Spring AOP的执行流程

下面是Spring AOP执行的流程图:

关于AdviceAdapter包装Advice见《Spring中的设计模式-适配器模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值