一共分为三步骤
1.定义注解
2.新建一个切面
3.对应的service添加注解
准备---->先导入aop的pom依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
第一步---->
在工程目录下,新建一个注解包,建一个注解类,添加俩个注解
@Retention(RetentionPolicy.RUNTIME)//该注解为运行时
@Target(ElementType.METHOD)//作用于方法
/**
* @author : shnan
* @version : 1.0
* @description :
* @createDate : 2023/11/23 9:37
* @project : easyCode_11_21
*/
@Retention(RetentionPolicy.RUNTIME)//运行时
@Target(ElementType.METHOD)//作用于方法
public @interface adminOnly {
}
第二步---->
在工程下,新建一个aspect切面的软件包,建一个关于 实现增强功能命名的类
当我们将service方法标注上面的adminOnly注解的时候,再次请求这个方法,则程序会执行到
@Before("CheckAdmin()")---->标注的service方法执行之前
@After("CheckAdmin()") ---->标注的service方法执行之后
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
/**
* @author : shnan
* @version : 1.0
* @description :
* @createDate : 2023/11/23 9:44
* @project : easyCode_11_21
*/
@Aspect
@Component
public class CheckUserAspect {
//切入点方法,当有标注此 注解的方法 都会执行这个切入点
@Pointcut("@annotation(com.example.easycode_11_21.annoatation.adminOnly)")
public void CheckAdmin() {
}
//切入点 前置 操作
@Before("CheckAdmin()")
public void checkBefore() {
System.out.println("前置校验");
}
@After("CheckAdmin()")
public void checkAfter() {
System.out.println("后置校验");
}
}
第三步---->
在你需要执行aop操作的方法上加 自定义的adminOnly的增强业务注解
@Resource
private TbUserMapper tbUserMapper;
/**
* 通过ID查询单条数据
*
* @param id 主键
* @return 实例对象
*/
@Override
@adminOnly
public R queryById(Long id) {
TbUser tbUser = this.tbUserMapper.queryById(id);
return R.ok().setData(tbUser);
}