面向切面概念
什么是切面?
切面就是把多个类的公共行为封装起来。(比如日志记录,拦截方法,过滤等操作)
反过来理解就是多个类都需要这个操作,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。
代码部分
1.首先创建一个切面接口
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface APIAESEncryption {
String value() default "";
}
2.创建一个类,@Pointcut定义切点。(相当于为APIAESEncryption 接口添加了实现方法。即切面的具体实现内容)
@Aspect
@Component
public class APIAESEncryptionAspect {
@Pointcut("@annotation(com.fendasz.mokucloud.mokuplanet.annotation.APIAESEncryption)")
private void cut() {
}
/**
* <h5>功能:前置通知</h5>
*/
@Before("cut()")
public void before() {
System.out.println("注解类型前置通知");
}
//后置通知
@After("cut()")
public void sayGoodbey() {
System.out.println("注解类型后置通知");
}
//环绕通知。注意要有ProceedingJoinPoint参数传入。
@Around("cut()")
public Object sayAround(ProceedingJoinPoint pjp) throws Throwable {
return pjp.proceed();//执行方法
}
}
3.添加以接口为名的注解即可(添加该注解就会实现此切面行为)
@APIAESEncryption
@ApiOperation(value = "客户端获取任务记录列表")
@PostMapping("/record/list")
public Object listRecord(
@Valid @RequestBody ClientTaskDataSubmitRecordModel clientBasicParameter) {
return service.listRecord(clientBasicParameter);
}
4.依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
</dependency>