美文网首页
SpringBoot(30) — 切面引入增强@DeclareP

SpringBoot(30) — 切面引入增强@DeclareP

作者: 奔跑的佩恩 | 来源:发表于2021-09-03 15:37 被阅读0次

    前言

    在上一节中,我们已经了解了Aop切面编程的环绕通知@Around,大家有兴趣的话可参考
    SpringBoot(29) — AOP编程之环绕通知@Around
    这节我们来学习下AOP编程的引入注解@DeclareParents

    今天涉及以下内容:

    1. 什么时候需要使用到引入注解@DeclareParents
    2. @DeclareParents的具体使用
      2.1 AOP添加依赖
      2.2 确定拦截目标
      2.3 定义要引入的检测类
      2.4 定义切面并引入检测类
    3. 测试

    先来波测试结果:

    ======我是测试啊=====
    =======检测不为空=======
    =====before...==
    ======我是要打印的信息啊: 大家好
    =====success...==
    =====after...==
    

    一. 什么时候需要使用到引入注解 @DeclareParents

    当我们在使用AOP切面时,要拦截的方法我们已经无法改变了,但是我们在进行AOP拦截后,要打印该方法相关信息的log, 在AOP处理打印之前,我想对目标方法的参数做非空判断,这时就需要用到@DeclareParents来引入检测方法,而这个检测方法就用来处理非空判断。
    这便是@DeclareParentsAOP切面编程中使用的场景。

    二. @DeclareParents 的具体使用

    2.1 AOP添加依赖

    AOP编程,我们首先要引入AOP相关依赖,具体可参考
    SpringBoot(28) — AOP切面编程

    2.2 确定拦截目标

    下面简单给出我们AOP切面需要去拦截的方法。先给出目标接口类Iprinter

    /**
     * Title:
     * description:
     * autor:pei
     * created on 2019/9/3
     */
    public interface Iprinter {
    
        void printInfo(String message,int code);
    }
    

    其实现类Printer代码如下:

    @Component("Printer")
    public class Printer implements Iprinter {
    
        @Override
        public void printInfo(String message, int code) {
            if (StringUtil.isEmpty(message)) {
                throw new NullPointerException("====参数不能为空====");
            }
            LogUtil.println("======我是要打印的信息啊: " + message);
        }
    }
    
    2.3 定义要引入的检测类

    这里我们主要需要做一个检测AOP拦截处理目标方法(Printer类的printInfo(String message, int code)方法)中参数是否为空。
    则先建接口类IChecker:

    /**
     * Title:
     * description:
     * autor:pei
     * created on 2019/9/3
     */
    public interface IChecker {
    
        boolean check(String message);
    
    }
    

    然后IChecker的实现类Checker代码如下:

    /**
     * Title:
     * description:
     * autor:pei
     * created on 2019/9/3
     */
    public class Checker implements IChecker{
    
        @Override
        public boolean check(String message) {
            if(StringUtil.isNotEmpty(message)){
                LogUtil.println("=======检测不为空=======");
                return true;
            }else{
                LogUtil.println("=======检测是空=======");
            }
            return false;
        }
    
    }
    
    2.4 定义切面并引入检测类

    自定义一个简单的切面类CustomAspect,代码如下:

    相关文章

      网友评论

          本文标题:SpringBoot(30) — 切面引入增强@DeclareP

          本文链接:https://www.haomeiwen.com/subject/wadkwltx.html