Spring5应用之AOP额外功能详解
前言
从本篇文章开始,我会更深入地探讨额外功能和切入点的开发和应用。首先,我们会聚焦于“额外功能”的实现。为了实现这一目标,我们采用了实现MethodBeforeAdvice接口的方法。在接下来的内容中,我将为大家详细解读MethodBeforeAdvice接口
,以及与之相关的另一个接口——MethodInterceptor接口
MethodBeforeAdvice详解
MethodBeforeAdvice接口
是Spring框架专为我们定制的一个接口。一旦实现了这个接口,我们便能够在原始对象的方法执行前添加自定义的附加操作。既然已对该接口的作用有了初步了解,接下来的焦点将放在这个接口中的唯一方法——before方法
上。我们将对此方法以及它的参数进行深入的探讨和分析
- Method method:代表当前额外功能所增加给的那个原始方法,比如login方法、register方法
- Object[] args:代表当前额外功能所增加给的那个原始方法的参数列表,
- Object target:代表当前额外功能所增加给的那个原始对象,比如UserServiceImpl
实战使用
虽然上面已经对before方法的三个参数进行了简要的讲解,但在实际操作中,我们又应该如何使用这些参数呢?实际上,在实战中,我们会根据具体的需求来决定是否使用before方法中的参数。有时,我们可能会使用其中的某一个或某几个参数;而有些时候,这些参数可能一个也用不上。这主要是因为MethodBeforeAdvice接口的设计初衷就是只支持在方法执行前插入额外的功能
MethodInterceptor详解
public class Arround implements MethodInterceptor {
private static final Logger log = LoggerFactory.getLogger(Arround.class);
/**
* 给原始方法添加额外功能(可以运行在原始方法之前或之后),只需要确定原始方法何时执行
* @param methodInvocation 额外功能所添加的原始方法
* @return 代理对象的方法的返回值
* @throws Throwable 异常
*/
@Override
public Object invoke(MethodInvocation methodInvocation) throws Throwable {
log.debug("--额外功能----- 原始方法执行之前");
// 运行原始方法,返回值为原始方法的返回值
Object result = null;
try {
result = methodInvocation.proceed();
} catch (Exception e) {
log.error("--额外功能----- 发生异常后的功能", e);
}
log.debug("--额外功能----- 原始方法执行之后");
return result;
}
}
总结
在本文中,我们深入探讨了Spring AOP所提供的两个核心接口——MethodBeforeAdvice
与MethodInterceptor
。这两个接口极大地简化了我们在项目中加入额外功能的过程。与静态代理相比,我们无需创建大量的类进行整合,显著提高了开发的便捷性
参考文献
转载自:https://juejin.cn/post/7282683504272703528