前言
在上一节中,我们已经了解了Aop
切面编程的环绕通知@Around
,大家有兴趣的话可参考
SpringBoot(29) — AOP编程之环绕通知@Around
这节我们来学习下AOP
编程的引入注解@DeclareParents
。
今天涉及以下内容:
- 什么时候需要使用到引入注解
@DeclareParents
-
@DeclareParents
的具体使用
2.1 AOP添加依赖
2.2 确定拦截目标
2.3 定义要引入的检测类
2.4 定义切面并引入检测类 - 测试
先来波测试结果:
======我是测试啊=====
=======检测不为空=======
=====before...==
======我是要打印的信息啊: 大家好
=====success...==
=====after...==
一. 什么时候需要使用到引入注解 @DeclareParents
当我们在使用AOP
切面时,要拦截的方法我们已经无法改变了,但是我们在进行AOP
拦截后,要打印该方法相关信息的log
, 在AOP
处理打印之前,我想对目标方法的参数做非空判断,这时就需要用到@DeclareParents
来引入检测方法,而这个检测方法就用来处理非空判断。
这便是@DeclareParents
在AOP
切面编程中使用的场景。
二. @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
,代码如下:
网友评论