在项目中需要在aop中获取方法参数名和取值,方法名获取方法:
public void verify(JoinPoint joinPoint) {
//所有的参数和参数名
Object[] values = joinPoint.getArgs();
String[] names = ((MethodSignature) joinPoint.getSignature()).getParameterNames();
}
有的方法可以通过这个成功,有的则会失败,网上大多数解决方案是jdk需要开启-parameters编译参数,或者mvn项目中添加插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<compilerArgument>-parameters</compilerArgument><!--重点配置-->
<source>1.8</source><!--重点配置-->
<target>1.8</target><!--重点配置-->
<encoding>UTF-8</encoding>
</configuration>
</plugin>
但是这个在多模块的项目中可能修改起来比较烦,成功获取参数名的方法是因为动态代理使用的是cglib,所以无需开启上面的配置都行,所以我们只需要在项目中强制使用cglib就行。
<aop:aspectj-autoproxy proxy-target-class="true"/>
而在spring-boot项目中,是默认采用cglib实现动态代理的,所以不用添加配置,这就是我们在老项目写好的aop复制到新项目有时就不能用的原因了。