spring-aop中对象MethodSignature的getParameterNames()返回结果为null

在项目中需要在aop中获取方法参数名和取值,方法名获取方法:

public void verify(JoinPoint joinPoint) {
        //所有的参数和参数名
        Object[] values = joinPoint.getArgs();
        String[] names = ((MethodSignature) joinPoint.getSignature()).getParameterNames();
}

有的方法可以通过这个成功,有的则会失败,网上大多数解决方案是jdk需要开启-parameters编译参数,或者mvn项目中添加插件:


                org.apache.maven.plugins
                maven-compiler-plugin
                
                    -parameters
                    1.8
                    1.8
                    UTF-8
                
            

但是这个在多模块的项目中可能修改起来比较烦,成功获取参数名的方法是因为动态代理使用的是cglib,所以无需开启上面的配置都行,所以我们只需要在项目中强制使用cglib就行。

而在spring-boot项目中,是默认采用cglib实现动态代理的,所以不用添加配置,这就是我们在老项目写好的aop复制到新项目有时就不能用的原因了。

你可能感兴趣的:(java基础,spring)