1、创建注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MethodRemarkInfo {
String methodRemark() default "";
}
2、创建注解的aop切面类
@Aspect //说明当前对象时一个切面
@Component
public class MethodRemarkInfoAspect {
@Pointcut("@annotation(com.example.dyc.annotation.MethodRemarkInfo)")
public void pointCut(){}
@Around("pointCut()")
public void getMethodRemarkInfo(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
// 获取目标方法上的注解
MethodSignature methodSignature = (MethodSignature) proceedingJoinPoint.getSignature();
Method method = methodSignature.getMethod();
MethodRemarkInfo methodRemarkInfo = method.getAnnotation(MethodRemarkInfo.class);
if(methodRemarkInfo == null){
proceedingJoinPoint.proceed();
}
// 获取注解的字段值
String methodRemark = methodRemarkInfo.methodRemark();
System.out.println("methodRemarkInfo: " + methodRemark);
//执行目标方法
proceedingJoinPoint.proceed();
}
}
3、使用注解标注方法
@RestController
@RequestMapping(value="/goods")
public class GoodsController {
@Resource
Goods goods;
@GetMapping("/goodsInfo")
@MethodRemarkInfo(methodRemark = "这是goodsInfo方法")
public String goodsInfo(String name){
System.out.println("goodsInfo");
return goods.getName() + " " + goods.getNum() + " " + goods.getNum();
}
}
4、运行结果