spring底层源码分析-Spring AOP概述

3、Spring AOP概述

3.1 Advice通知

**Advice通知定义连接点做什么。**在Spring AOP的实现中使用了Advice这个统一接口,并通过这个接口 提供了更具体的通知类型,如:BeforeAdvice、AfterAdvice、ThrowsAdvice等。

3.1.1 前置通知接口

BeforAdvice接口,定义了为待增强的目标方法设置的前置增强接口MethodBeforeAdvice接口(MethodBeforeAdvice接口继承BeforAdvice接口),使用这个MethodBeforeAdvice前置接口需要实现一个回调函数:

void before(Method method, Object[] args, @Nullable Object target) throws Throwable;

before方法的实现在Advice被配置到目标方法后,会在调用目标方法时被回调。**参数:**Method对象,这个参数是目标方法的反射对象;Object[ ]为目标方法的输入参数。

3.1.2 后置通知接口

AfterAdvice接口,定义了为待增强的目标方法设置的后置增强接口AfterReturningAdvice接口(AfterReturningAdvice接口继承AfterAdvice接口)。使用这个AfterReturningAdvice后置接口需要实现一个回调函数:

void afterReturning(@Nullable Object returnValue, Method method, Object[] args, @Nullable Object target) throws Throwable;

afterReturning方法的实现在Advice被配置到目标方法后,会在目标方法调用结束并成功返回时被Spring AOP回调。参数:returnValue,目标方法的返回值;method,目标方法的反射对象;args,目标方法的输入参数。

3.1.3 异常通知接口

ThrowsAdvice接口,并没有指定需要实现的方法,它在抛出异常时被回调,这个回调是AOP使用反射机制来完成的。

3.2 Pointcut切点

Pointcut(切点)决定Advice通知应该作用于哪个连接点,也就是说通过Pointcut来定义徐娅增强的方法的集合,这些集合的选取可以按照一定的规则来完成(例如正则表达式)。

类继承关系如下:

在这里插入图片描述

Pointcut接口中可以看到getMethodMatcher()方法,这个方法是获得MethodMatcher类对于切点的匹配判断功能具体是由这个返回的MethodMatcher类来完成,也就是说由这个MethodMatcher类来判断是否需要对当前方法调用增强,或者是否需要对 当前调用方法 应用 配置好的Advice通知。

**JdkRegexpMethodPointcut就是正则表达式切点。**JdkRegexpMethodPointcut类完成通过正则表达式对方法名进行匹配的功能。

**在JdkRegexpMethodPointcut类中正是使用matches方法来使用正则表达式来对方法名进行匹配。**而matches方法是MethodMatcher定义的接口方法。对matches方法的调用 是在JdkDynamicAopProxy的invoke方法中触发的,invoke方法是Proxy对象进行回调的入口方法。

在Spring AOP中还提供了NameMatchMethodPointcut类,是通过方法名匹配来进行Advice匹配。matches方法实现如下:

public boolean matches(Method method, Class<?> targetClass) {
		for (String mappedName : this.mappedNames) {
			if (mappedName.equals(method.getName()) || isMatch(method.getName(), mappedName)) {
				return true;
			}
		}
		return false;
	}

// 支持 xxx**yy等这样的匹配。
protected boolean isMatch(String methodName, String mappedName) {
		return PatternMatchUtils.simpleMatch(mappedName, methodName);
	}

3.3 Advisor通知器

完成对目标方法的切面增强设计(Advice)和关注点的设计(Pointcut)以后,需要一个对象把它们结合起来,完成这个作用的就是Advisor(通知器)。通过Advisor可以定义应该使用哪个通知并在哪个关注点使用它,也就是说通过Advisor,把Advice和Pointcut结合起来,这个结合为使用IoC容器配置AOP应用提供了遍历。

DefaultPointcutAdvisor类是Advisor接口的实现,有两个属性advice和pointcut,分别配置Advice和Pointcut。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值