Spring参考文档中的C命名空间部分

时间:2014-12-30 02:37:42

标签: java spring

我正在阅读spring文档,我无法理解来自c-namespace section in the reference document

的以下声明
  

对于构造函数参数名称不可用的极少数情况(通常是字节码为   编译没有调试信息),可以使用回退到参数索引

我的问题是:

  1. 在什么情况下,构造函数参数不可用。
  2. 在没有调试信息的情况下编译的字节代码是什么意思。可以用eclipse检查吗?
  3. 我在网上检查这个,但可以得到任何参考。我发现了Constructor injection using c:namespace,但它没有解释任何事情

2 个答案:

答案 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