目录
导入依赖
<dependency>
<groupId>javax.validtion</groupId>
<artifactId>validation-api</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate.validation</groupId>
<artifactId>hibernate-validation</artifactId>
</dependency>
注解定义
自定义注解MySysLog
package com.example.hellospringboot.annotation;
import java.lang.annotation.*;
@Documented
@Retention(RetentionPolicy.CLASS)
@Target(ElementType.METHOD)
public @interface MySysLog {
}
定义函数(@Pointcut("@annotation(com.example.hellospringboot.annotation.MySysLog)")类或者方法写MySysLog注解时会先跳入SysLogAop函数,执行里面的语句)
package com.example.hellospringboot.aop;
import com.example.hellospringboot.annotation.MySysLog;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
@Component
@Aspect
public class SysLogAop {
@Pointcut("@annotation(com.example.hellospringboot.annotation.MySysLog)")
private void myAnnotation() {
}
/**
* 环绕通知
*/
@Around("myAnnotation()")
public void advice(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("around begin...");
//执行到这里走原来的方法
joinPoint.proceed();
System.out.println("around after....");
}
@Before("myAnnotation()")
public void record(JoinPoint joinPoint) {
System.out.println("Before");
}
@After("myAnnotation()")
public void after() {
System.out.println("After");
}
}
通过/aa测试自定义注解,
package com.example.hellospringboot.Controller;
import com.example.hellospringboot.annotation.MySysLog;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MyAnnotationController {
@MySysLog
@RequestMapping("/aa")
public void testAnnotation(){
System.out.println("我正在测试自定义注解对数据库进行操作。。。");
}
}
验证注解
前端没有显示点击刷新
在Run里会打印testAnnotation,但因为有注解MySysLog所以会先做SysLogAop函数的语句,所以会打印
System.out.println("我正在测试自定义注解对数据库进行操作。。。");