spring 参考文档中的 C-namespace 部分
Posted
技术标签:
【中文标题】spring 参考文档中的 C-namespace 部分【英文标题】:C-namespace section in spring reference document 【发布时间】:2014-12-30 02:37:41 【问题描述】:我正在阅读 Spring 文档,但我无法理解来自 c-namespace section in the reference document 的以下声明
对于构造函数参数名称不可用的极少数情况(通常如果字节码是 编译时没有调试信息),可以使用回退到参数索引
我的问题是:
-
在什么情况下构造函数参数不可用。
-byte 代码编译时没有调试信息是什么意思。可以用eclipse检查吗?
我正在通过网络检查这个,但可以得到任何参考。我找到了Constructor injection using c:namespace,但它没有解释任何事情
【问题讨论】:
【参考方案1】:只有在使用变量调试信息编译类时,构造函数参数名称才可用。使用javac
时,这是-g:vars
选项。在 Eclipse 中,这是Windows > Preferences > Java > Compiler > Add variable attributes to generated class files
。
【讨论】:
【参考方案2】:如果有问题的类是由javac
编译而没有-g
标志(“调试信息” - 参见javac docs),那么编译后的类字节码将不包含构造函数参数的名称。这意味着 Spring 不能使用反射来匹配构造函数参数名称,因此您需要按位置(即按索引)注入它们。
生成已编译字节码以确保提供调试信息的是构建环境。编译代码后,除了重新编译之外,您无法检索该信息。
另见What does the javac debugging information option -g:vars do?
【讨论】:
以上是关于spring 参考文档中的 C-namespace 部分的主要内容,如果未能解决你的问题,请参考以下文章