likes
comments
collection
share

Spring5应用之AOP额外功能详解

作者站长头像
站长
· 阅读数 10

前言

从本篇文章开始,我会更深入地探讨额外功能和切入点的开发和应用。首先,我们会聚焦于“额外功能”的实现。为了实现这一目标,我们采用了实现MethodBeforeAdvice接口的方法。在接下来的内容中,我将为大家详细解读MethodBeforeAdvice接口,以及与之相关的另一个接口——MethodInterceptor接口

MethodBeforeAdvice详解

MethodBeforeAdvice接口是Spring框架专为我们定制的一个接口。一旦实现了这个接口,我们便能够在原始对象的方法执行前添加自定义的附加操作。既然已对该接口的作用有了初步了解,接下来的焦点将放在这个接口中的唯一方法——before方法上。我们将对此方法以及它的参数进行深入的探讨和分析

  • Method method:代表当前额外功能所增加给的那个原始方法,比如login方法、register方法
  • Object[] args:代表当前额外功能所增加给的那个原始方法的参数列表,
  • Object target:代表当前额外功能所增加给的那个原始对象,比如UserServiceImpl Spring5应用之AOP额外功能详解

实战使用

虽然上面已经对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所提供的两个核心接口——MethodBeforeAdviceMethodInterceptor。这两个接口极大地简化了我们在项目中加入额外功能的过程。与静态代理相比,我们无需创建大量的类进行整合,显著提高了开发的便捷性

参考文献