2016-07-23 29 views
2

LoggingAspect.javaFrühling AOP: - Erste parameterNames als null in den joinPoint

@Around("allGenericAppServiceImplMethods()") 
public Object LoggingAdvice(ProceedingJoinPoint joinPoint)throws Throwable{ 

MethodSignature signature = (MethodSignature)joinPoint.getSignature(); 
String[] parameterNames = signature.getParameterNames(); 

Object[] arguments = joinPoint.getArgs(); 

Ich erhalte parameterNames als null.How finde ich die parameterNames bekommen?

Antwort

1

Ich habe gerade in AspectJ eingecheckt und ich bekomme nie Parameternamen wie null mit AspectJ 1.8.6. Vielleicht verwenden Sie eine ältere Version und müssen auf die aktuelle Version (1.8.9) upgraden. Die Parameternamen werden korrekt angezeigt, wenn die betreffenden Klassendateien mit den entsprechenden Debug-Informationen kompiliert wurden. Aber selbst wenn die Debug-Informationen gestrippt wurde oder Sie Zugriff auf Parameternamen für Methoden JDK, zumindest werden AspectJ Namen ausspucken wie arg0, arg1 usw.

Update: Das Problem besteht nicht in reiner AspectJ oder in AspectJ LTW wurde in Spring-Anwendungen nur in Proxy-basierten Spring AOP mit dynamischen JDK-Proxys verwendet. Ich könnte das Problem mit einem kleinen Beispielprojekt reproduzieren, das ich irgendwo auf GitHub geklont habe.

Die Lösung, wenn Sie gegen Schnittstellen programmieren, besteht darin, die CGLIB-Verwendung für Proxies zu erzwingen, obwohl der Standardwert hier JDK-Proxies ist.

Also, wenn Sie Ihre Konfiguration sieht aus wie ...

<aop:aspectj-autoproxy/> 

... es nur ändern:

<aop:aspectj-autoproxy/> 
<aop:config proxy-target-class="true"> 
    <!-- other beans defined here... --> 
</aop:config> 

versuchen dann erneut und zu genießen. :-)

+0

Hallo @kriegaex! Ich verwende derzeit AspectJ 1.6.11. Ich werde auf die neueste Version aktualisieren und überprüfen .... –

+0

Ich habe gerade aktualisiert meine aspectj maven Abhängigkeit zu 1.8.9 .... immer noch bekomme ich ParameterNames als null ... Ist dieses Problem etwas mit jdk oder cglib Proxy verbunden? ... –

+0

Ich habe meine Antwort aktualisiert. – kriegaex