编写一个注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@RequestMapping(method = RequestMethod.GET)
public @interface RequestGet {
/**
* Alias for {@link RequestMapping#name}.
*/
@AliasFor(annotation = RequestMapping.class)
String name() default "";
/**
* Alias for {@link RequestMapping#value}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] value() default {};
/**
* Alias for {@link RequestMapping#path}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] path() default {};
/**
* Alias for {@link RequestMapping#params}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] params() default {};
/**
* Alias for {@link RequestMapping#headers}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] headers() default {};
/**
* Alias for {@link RequestMapping#consumes}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] consumes() default {};
/**
* Alias for {@link RequestMapping#produces}.
*/
@AliasFor(annotation = RequestMapping.class)
String[] produces() default {};
}
这个注解的功能和GetMapping注解是一样的。
编写一个测试controller
@RestController
public class TestController {
@RequestGet("/hello")
public String hello(String name){
return "hello" + name;
}
}
编写对这个注解的增加类
@Component
@Aspect
public class RequestGetAspect {
private static final Logger logger = LoggerFactory.getLogger(RequestGetAspect.class);
/**
* 对这个注解做切面
*/
@Pointcut("@annotation(com.wk.annation.demo.annation.RequestGet)")
public void pointCut(){
}
@Around("pointCut()")
public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
logger.info("方法开始执行");
Object[] args = joinPoint.getArgs();
for (Object arg : args) {
logger.info("方法参数:" + arg);
}
logger.info("方法结束执行");
return joinPoint.proceed();
}
}
查看日志
这样我们可以通过自定义注解实现对这个接口的参数校验,或者限流等操作。