Spring AOP中涉及到以下一些基本概念

JoinPoint:从单词意思理解为:连接点,是的,它是程序在执行过程中可以被外部程序可以织入的点,它可以是方法执行前,方法执行后等,理论上讲,程序执行过程中的任何一个点都应该可以成为一个织入点。

Pointcut:程序运行过程中既然有这么多织入点,那么如何定位我们比较感兴趣的一下点呢?PointCut实际上是对织入点的表述,通过PointCut可以指定一组我们感兴趣的织入点,它定义了相应的操作处理Advice将要发生的地方。另外,PointCut可以通过通配、正则表达式等方式将JoinPoint集中起来,也可以进行逻辑组合运算,将两个或者多个PointCut通过一定的逻辑运算,可以组合成一些更为复杂的PointCut。

Advice是单一的逻辑关注点的载体,Advice 定义了在切入点pointcut 里面定义的连接点具体要做的操作和处理,它通过 before、after 和 around 来区别是在每个切入点之前、之后还是代替执行的代码。

Target :符合JoinCut指定的条件,在织入过程中,被织入横切逻辑的对象,称为目标对象。

Aspect:切面,由一组PointCut和Advice,定义了一段程序中应该包括的逻辑,以及何时应该执行该逻辑。

Spring中的AOP的实现实际上是采用一种代理模式,代理模式的结构如图所示,代理对象和被代理对象同时实现了同一个接口,同时代理对象会将内部的请求转发给被代理的对象,当然,在请求转发之前或者之后,代理对象可以执行一些自己的操作,利用这个时机就可以织入一些我们需要的业务逻辑。


在jdk1.3之后,提供了动态代理机制,通过java.lang.reflect.Proxy和java.lang.reflect.InvocationHandler接口,可以轻松实现对某个接口的代理对象。

当然并不是每个类都会实现某个接口,若没有接口,这种情况下,java动态代理可能就无能为力了,这时候需要另一个工具,就是Cglib,它的具体原理是通过字节码扩张方式,扩展taget类的一个子类,然后在子类里面织入横切逻辑。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值