Spring Boot 实现自定义注解
在Spring Boot中简单实现如何自定义注解,注释说明了部分类或注解的作用
##导入依赖
<!-- aop依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
定义注解
@Retention(RetentionPolicy.RUNTIME)
// @Retention注解根据RetentionPolicy指定注解的生命周期
// RetentionPolicy.SOURCE 保留在源文件,当源文件被加载为.class文件时,注解遗弃
// RetentionPolicy.CLASS 保留在class文件,当jvm加载class文件后,注解遗弃,默认周期
// RetentionPolicy.RUNTIME 保留在class文件,且jvm加载后,仍然保留
@Target(ElementType.METHOD)
// @Target注解根据ElementType指定注解作用的范围
public @interface UserInfoCheck {
}
Aspect
@Aspect
// 将当前类标识为切面供容器读取
@Order(0)
// @Order注解用于指定Bean在spring ioc容器的执行顺序,数字越小,优先级越高
@Component
// @Component注解用于当类不属于Controller或者Service时,使用该注解,将类注入spring容器
public class UserInfoCheckAspect {
@Before("@annotation(userInfoCheck)")
public void userInfoCheck(JoinPoint joinPoint, UserInfoCheck userInfoCheck) throws Exception {
// JoinPoint类
// joinPoint.getArgs(); 获取目标方法的参数对象
// joinPoint.getTarget(); 获取被代理的对象
// joinPoint.getThis(); 获取代理对象
for(Object obj : joinPoint.getArgs()){
// 匹配需要校验的参数
if(obj instanceof UserInfoDto){
UserInfoDto userInfoDto = (UserInfoDto) obj;
if(userInfoDto != null){
return;
}
}
}
throw new Exception("用户信息为空");
}
}