AOP通过反射获取自定义注解

时间:2024-11-18 11:33:08

自定义注解:

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface DemoAnno {
String value() default "";
}

AOP:

@Pointcut("@annotation(com.hephae.aop.aop.DemoAnno)")
public void demoAspect() {
} @Around(value = "demoAspect()")
public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
Signature signature = joinPoint.getSignature();
MethodSignature methodSignature = (MethodSignature)signature;
//method为接口的Method对象,获取不到实现类方法上的注解
Method method = methodSignature.getMethod();
//targetMethod为实现类方法对象
Method targetMethod = joinPoint.getTarget().getClass().getMethod(method.getName(), method.getParameterTypes());
//获取注解
DemoAnno demoAnno = targetMethod.getAnnotation(DemoAnno.class);
if (demoAnno != null) {
String value = demoAnno.value();
}
Object obj = null;
obj = joinPoint.proceed();
return obj;
}