Java AOP JoinPoint does not get parameter names

二次信任 提交于 2019-12-03 17:18:23

As I've said in above comment, depending on proxy type you can or can't have access to parameter names. If your bean implements interface, the JDK proxy will be created by spring, and in this kind of proxy MethodSignature.getParameterNames() is null. If your bean doesn't implement interface, CGLIB proxy is created, where MethodSignature.getParameterNames() is filled.

If you can, you may switch to CGLIB proxy bean by removing bean interfaces and it should work.

I'm struggling with the same now, and I can't remove interfaces. I figured out different solution for this. On the interface I can mark my parameters by some custom annot:

interface MyInterface {
  void myMetod(@ParamName("foo") Object foo, @ParamName("bar") Object bar);
}

Now in AOP proxy I can get this information in:

MethodSignature.getMethod().getParameterAnnotations()

I could make this work in Eclipse with Java 8 only . Here's how:

  • Right Click on the project -> Properties -> Java Build Path -> Libraries tab and make sure you add there a JDK 8 instead of what you have now (in my case I had JDK_1.7.0_51 and replaced it with JDK_1.8.0_05). Apply changes.
  • Go to Java Compiler -> Check Enable project specific settings -> Check Use default compliance settings and set Compiler compliance level to 1.8. The same goes for Generated .class files compatibility and Source compatibility.
  • At the Classfile Generation section make sure to check Store method parameter names option (in my tests, I had all the options under Classfile Generation checked). The Store method parameter names option was available in my case only for a compliance level of 1.8. Click Ok.
  • Clean and re-compile your project.
  • I have, also, run my project on Tomcat 7 with JDK 8. No need to run it in Debug mode.

Tested this in STS 3.5.1 (Eclipse Kepler SR2 4.3.2).

The simplest way is to set proxyTargetClass in your config file, i.e.

@EnableAspectJAutoProxy(proxyTargetClass = true)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!