我正在阅读spring文档,我无法理解来自c-namespace section in the reference document
的以下声明对于构造函数参数名称不可用的极少数情况(通常是字节码为 编译没有调试信息),可以使用回退到参数索引
我的问题是:
我在网上检查这个,但可以得到任何参考。我发现了Constructor injection using c:namespace,但它没有解释任何事情
答案 0 :(得分:2)
如果有问题的类是由javac
编译而没有-g
标志("调试信息" - 请参阅javac docs),那么编译后的类字节码将不会包含构造函数参数的名称。这意味着Spring不能使用反射来匹配构造函数参数名称,因此您需要按位置(即通过索引)注入它们。
构建环境生成编译的字节码以确保提供调试信息。编译代码后,除了重新编译之外,您无法检索该信息。
另见What does the javac debugging information option -g:vars do?
答案 1 :(得分:2)
构造函数参数名称仅在使用可变调试信息编译类时才可用。使用javac
时,这是-g:vars
选项。在Eclipse中,这是Windows > Preferences > Java > Compiler > Add variable attributes to generated class files
。