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
    评论
Spring AOP (Aspect Oriented Programming) 是 Spring 框架的一个核心模块,它提供了一个非常方便的机制来实现横切关注点的功能,如日志记录、性能统计、安全控制等。 Spring AOP 的实现原理主要涉及以下几个方面: 1. 静态代理 Spring AOP 底层采用了静态代理的方式来实现 AOP 相关功能。它利用代理类来包装原始对象,并在代理类添加横切逻辑代码,从而实现对原始对象的增强。 2. 切面(Aspect) 切面是 Spring AOP 最核心的概念,它定义了横切逻辑的实现方式。在 Spring AOP ,切面通常是一个 Java 类,它包含了一些通知(Advice)和切点(Pointcut),用来描述横切逻辑的具体实现。 3. 通知(Advice) 通知是切面的一个方法,它包含了实际的横切逻辑代码。Spring AOP 提供了五种类型的通知: - 前置通知(Before advice):在目标方法执行前执行。 - 后置通知(After returning advice):在目标方法返回后执行。 - 环绕通知(Around advice):在目标方法执行前后都执行。 - 异常通知(After throwing advice):在目标方法抛出异常后执行。 - 最终通知(After finally advice):在目标方法执行后执行,无论是否抛出异常。 4. 切点(Pointcut) 切点是一个表达式,用来匹配目标对象的方法。Spring AOP 支持多种切点表达式语言,如 AspectJ 表达式、Java 注解等。 5. Advisor Advisor 是 Spring AOP 的一个概念,它将切点和通知进行了封装,是 Spring AOP 的基本组成单元。 6. 织入(Weaving) 织入是指将切面应用到目标对象的过程。在 Spring AOP ,织入可以在编译期、类加载期、运行期三个阶段进行。Spring AOP 默认采用运行期织入的方式,即在目标对象方法调用时动态地将切面代码织入到目标方法的前、后或异常抛出等不同时机。 以上就是 Spring AOP 的基本实现原理。通过静态代理、切面、通知、切点、Advisor 和织入等概念的使用,Spring AOP 实现了对目标对象的增强,实现了横切逻辑的功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值