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 部分的主要内容,如果未能解决你的问题,请参考以下文章

spring 中的@cacheable的key是怎么配置的

Spring Boot 容器镜像分层构建

Spring Boot 容器镜像分层构建

Spring Boot 容器镜像分层构建

教您怎么从spring 官网下载参考文档

Spring中的分页