我正在使用spring AOP,如何从注释中获取值, 这是我的注释:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Inherited
@Documented
public @interface ExecutionMethodProfiler
{
String value() default "defaultValue";;
}
这是我的XML:
<aop:aspectj-autoproxy/>
<aop:config>
<aop:aspect ref="methodProfiler">
<aop:pointcut id="serviceMethod"
expression="(execution(* com.old..*(..)) or execution(* com.test..*(..))) and @annotation(com.test.profiler.ExecutionMethodProfiler)" />
<aop:around pointcut-ref="serviceMethod" method="profile"/>
</aop:aspect>
</aop:config>
这是我的serviceMethod:
public void profile(ProceedingJoinPoint jointPoint) throws Throwable {}
截至目前,我可以使用此代码获取值:
MethodSignature signature = (MethodSignature) jointPoint.getSignature();
System.out.println(signature.getMethod().getAnnotation(ExecutionMethodProfiler.class).value());
我不喜欢它,有更好的方法吗?
答案 0 :(得分:0)
首先更改您的建议,将您的注释作为附加参数:
public void profile(
ProceedingJoinPoint jointPoint,
ExecutionMethodProfiler methodProfiler
) throws Throwable {}
然后将注释绑定到切入点中的该参数:
<aop:around
pointcut="(execution(* com.old..*(..)) or execution(* com.test..*(..))) and @annotation(methodProfiler)"
method="profile"
arg-names="methodProfiler"
/>
我实际上并没有对它进行测试,因为我现在有点忙,但这基本上就是它的工作方式。