AOP的相关概念

通知(Advice)

        切面的具体功能和使用场景,它定义了切面的具体功能是什么以及何时被使用。Advice 定义了在 pointcut 里面定义的程序点具体要做的操作,它通过 before、after 和 around 来区别是在每个 joint point 之前、之后还是代替执行的代码。


通知类型

        在Spring中,根据使用时机的不同,将通知划分为了5种类型,下面来一个个认识下吧!

        前置通知(Befor): 在目标方法被调用之前调用的通知功能。

        后置通知(After): 在目标方法完成后调用的通知功能,即使在执行目标方法出现异常,也照常执行。

        返回通知(After-returning): 在目标方法成功执行之后才调用通知功能。

        异常通知(After-throwing): 在目标方法抛出异常后执行通知功能。

        环绕通知(Around): 通知包围了目标方法,在调用目标方法前后可以执行自定义的通知功能。


连接点(Join point)

        它表示在业务逻辑执行过程中能够插入切面通知的一个点。在Spring中,这个点可以是调用方法时、调用方法后、抛出异常时。 切面代码可以利用这些点插入到应用的正常流程之中,并添加新的行为。

        Spring AOP 是基于动态代理的,所以它只支持方法的连接点,但像其他的AOP框架如AspectJ在修改属性时或者构造器执行时都可以织入通知,达到更细颗粒度的控制拦截。

        简单理解:就是方法的调用就称为连接点。


切入点(Pointcut)

        通俗理解: 通知作用于哪些连接点,这个点可以称为切入点,通过上面通知介绍可知,“通知”定义了切面是"什么"和"何时使用"作用,切入点则定义了"切面"在"何处"使用。 通过配置切入点,可以将通知织入到一个或者多个连接点中。

        在实际应用中,是通过指定类名称、方法名称、正则表达式进行来匹配指定切点,甚至还存在一些AOP框架允许动创建动态的切点,根据运行时的决策(如:方法的参数值)来确定是否需要使用通知增强。

        简单理解:符合某种规则的连接点


切面(Aspect)

         切面即切点和通知的集合,它定义了它是什么,在何时、何处完成这个功能。 

      Aspect 声明类似于 Java 中的类声明,在 Aspect 中会包含着一些 Pointcut 以及相应的 Advice。

        简单理解:狭义上的切面:一个类包含了增强的方法,和指定的规则

        广义上的切面=连接点+切入点+通知


引入(Introduction)

        允许向类中添加新的属性和方法,实际上就是增强类(让类拥有原来没有的功能或者属性)。 具体可以理解成将切面应用到目标类上,从而实现不修改类的代码,而让它具有新的功能和属性。


织入(Weaving)

        织入是把切面应用到目标对象并创建新的代理对象的过程,这是一个动态的过程, 切面在指定的切点被织入到目标对象中,实际上在目标对象的生命周期中,存在以下的多个点可以进行织入:

 1、编译期: 切面在目标类编译时被织入。这种方式需要特殊的编译器。AspectJ 的织入编译器就是以这种方式织入切面的。

 2、类加载期: 切面在目标类加载到 JVM 时被织入。这种方式需要特殊的类加载器(ClassLoader),它可以在目标类被引入应用之前增强该目标类的字节码。AspectJ 5 的加载时织入(load-time weaving,LTW)就支持以这种方式织入切面。

  3、运行期: 切面在应用运行的某个时刻被织入。一般情况下,在织入切面时,AOP 容器会为目标对象动态地创建一个代理对象。Spring AOP 就是以这种方式织入切面的。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值