spring boot为自定义注解使用AOP
新建自定义注解:
//用于描述方法,用于描述类,接口(包括注解类型)或enum声明
@Target({ElementType.METHOD,ElementType.TYPE})
//生命周期始终不丢弃,运行期仍保留该注解
@Retention(RetentionPolicy.RUNTIME)
//将注解添加在java文档中
@Documented
@Component
public @interface MyTestAnnotation {
/*表示该注解有一个名为value的可选参数,类型为String(可以设置默认值,default“xxx”),
若写为String value() default ""; 则表示value为必选参数,不指定会报错
*/
String value();
}
建立切面:
@Aspect
@Component
public class TestAnnotionAspect {
/**
* 定义切点,拦截被MyTestAnnotation注解的方法
*/
@Pointcut("@annotation(com.example.annotationaop.MyTestAnnotation)")
public void myAnnotationprint(){
}
@Before("myAnnotationprint()")
/**
* MethodSignature为方法签名,方法名和形参列表共同组成方法签名
* JoinPoint封装了springAop中切面方法的信息,在切面中添加JoinPoint参数,
* 就可以获取到封装了该方法信息的JoinPoint对象
*/
public void before(JoinPoint joinPoint)throws Throwable{
MethodSignature signature=(MethodSignature)joinPoint.getSignature();
Method method=signature.getMethod();
MyTestAnnotation annotation=method.getAnnotation(MyTestAnnotation.class);
//获取到注解里参数
System.out.println("TestAnnotation 参数:"+annotation.value());
}
}
在需要使用注解的地方使用注解:
@MyTestAnnotation("注解AOP测试成功!")
public void testAnnotation(){
}
测试结果:
注解AOP测试成功!