Advice学习

简介

在Spring框架的AOP(面向切面编程)中,Advice接口是定义通知行为的抽象。然而,在Spring的实际实现中,Advice接口并没有直接被使用。相反,我们更常见的是MethodInterceptor接口、BeforeAdvice接口、AfterAdvice接口等,这些都是Advice接口的不同实现或与之相关的接口。这些接口定义了在方法执行的不同时刻(如方法执行前、方法执行后、方法抛出异常时等)执行的操作。

下面我将对Spring AOP中的一些关键接口和类进行解析:

MethodInterceptor:

  • 这是Advice的一种实现方式,用于拦截目标方法。
  • 它有一个invoke方法,该方法在目标方法执行前后提供插入自定义逻辑的机会。
  • invoke方法接受一个MethodInvocation对象,该对象封装了目标方法、方法参数等信息。

BeforeAdvice:

  • 在目标方法执行前执行的操作。
  • 常见的实现是MethodBeforeAdvice,它有一个before方法,该方法在目标方法调用之前被调用。

AfterAdvice:

  • 在目标方法执行后执行的操作。
  • Spring AOP提供了AfterReturningAdvice和AfterThrowingAdvice两种实现:
  • AfterReturningAdvice:在方法正常返回后执行。
  • AfterThrowingAdvice:在方法抛出异常后执行。

Aspect:

  • 在Spring AOP中,切面是一个包含了通知和切点的对象。
  • 切面可以将多个通知(如前置通知、后置通知等)关联到一个或多个切点。
  • 在Spring中,通常使用注解(如@Aspect、@Before、@After等)来定义切面。

Pointcut:

  • 切点定义了何时应该执行通知。
  • 切点通常使用表达式来匹配目标方法,例如基于方法的名称、所在的包或类、参数类型等。
  • 在Spring中,切点可以使用注解(如@Pointcut)或XML配置来定义。

Advisor:

  • 顾问是一个包含了通知和切点的对象,它决定了何时何地应用通知。
  • 在Spring中,可以通过DefaultPointcutAdvisor或DefaultBeanFactoryPointcutAdvisor等类来创建顾问。

ProxyFactory 和 ProxyFactoryBean:

  • 这些类用于创建代理对象,该对象会拦截对目标方法的调用,并在适当的时候执行通知。
  • ProxyFactory提供了更多的配置选项,而ProxyFactoryBean则是一个Spring Bean,可以在Spring配置文件中直接使用。

使用Spring AOP时,你通常会定义切面(包含通知和切点),然后将这些切面配置到Spring容器中。Spring会根据这些配置自动创建代理对象,并在运行时拦截目标方法的调用,执行相应的通知逻辑。

源码

//通知接口 一种标识
public interface Advice {

}
//前置通知
public interface BeforeAdvice extends Advice {

}
//最终通知
public interface AfterAdvice extends Advice {

}
//后置通知
public interface AfterReturningAdvice extends AfterAdvice {

	/**
	 * returnValue:返回值
	 * method:拦截方法
	 * args:方法参数
	 * target:目标对象
	 */
	void afterReturning(@Nullable Object returnValue, Method method, Object[] args, @Nullable Object target) throws Throwable;

}
//异常通知
public interface ThrowsAdvice extends AfterAdvice {

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值