0
我使用Spring AOP的註釋值,我怎樣才能從註釋值, 這裏是我的註解: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>
這是我的服務方法:
public void profile(ProceedingJoinPoint jointPoint) throws Throwable {}
截至目前我可以通過使用此代碼獲取值:
MethodSignature signature = (MethodSignature) jointPoint.getSignature();
System.out.println(signature.getMethod().getAnnotation(ExecutionMethodProfiler.class).value());
我不喜歡它,有沒有更好的方法?
我試了一下,我得到的錯誤: 嵌套的異常是java.lang.IllegalArgumentException:錯誤:: 0正式無約束在切入點 – Breakidi
我已更新我的答案,以便在方法簽名中有第一個連接點參數。在AspectJ中,它可以是第一個或最後一個參數,但也許Spring在這裏更挑剔。此外,請確保參數名稱在任何地方都一樣:切入點,參數名稱和方法簽名。否則它不能被綁定。 – kriegaex
如果我更新方法簽名薄,我得到這個異常: 構造函數拋出異常;嵌套異常是java.lang.IllegalStateException:期望在通知中找到2個通過名稱綁定的參數,但實際上找到1個參數。 – Breakidi