eg:获取传入学生年纪,小于25不通过。
主要分两步骤:
1. 自定义注解
2.AOP 切面拦截
1、pom.xml 引入相关依赖
<!-- 引入aop 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!-- aspect 依赖 -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.2.6</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.27</version>
</dependency>
2、实现自定以注解 (具体注解就不多做解释)
import java.lang.annotation.*;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented //-- 生成javadoc 文档
// @Inherited --子类拥有父类的注解 @Inherited注解只对那些@Target被定义为ElementType.TYPE的自定义注解起作用。
public @interface StudentAnnotion {
String name() ;
int age() default 18;
}
3、使用该注解
import com.bfy.demo.annotation.StudentAnnotion;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* 测试注解
*/
@RestController
public class TestAnnotationController {
@RequestMapping( value = "man")
@StudentAnnotion(name = "莉莉",age = 25)
public String firstTest (@RequestParam String name,@RequestParam int age ) {
return name + age;
}
}
4、创建切面对该注解拦截
import com.bfy.demo.annotation.StudentAnnotion;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class StudentAnnotionspect {
@Pointcut("@annotation(com.bfy.demo.annotation.StudentAnnotion)") // 切入点 为该注解
private void pointcut() {
}
@Around("pointcut() && @annotation(studentAnnotion) ")
public Object around(ProceedingJoinPoint joinPoint, StudentAnnotion studentAnnotion) throws Throwable {
// 获取传递参数
Object[] args = joinPoint.getArgs();
Integer age = (Integer) args[1];
if (studentAnnotion.age() > age) {
return "年纪太小";
}
return joinPoint.proceed();
}
}
5、效果显示