我不知道为什么在Spring DI下面bean定义工作(我用bean instantiation with a static factory method和番石榴的Suppliers.ofInstance
):通用工厂方法
<bean id="keySupplier" class="com.google.common.base.Suppliers"
factory-method="ofInstance">
<constructor-arg>
<value type="java.lang.String">someReallyLongValue <!-- note line break here -->
</value>
</constructor-arg>
</bean>
但是这一次没有:
<bean id="keySupplier" class="com.google.common.base.Suppliers"
factory-method="ofInstance">
<constructor-arg type="java.lang.String" value="someReallyLongValue" />
</bean>
它引发以下异常:
org.springframework.beans.factory.BeanCreationException:Error creatin克豆名为“userRepo”类路径资源定义:
(...)
不合格依赖通过构造器参数表示与式[java.lang.Object中]的索引0:
歧义工厂方法参数类型 - 没有你指定了正确的bean引用作为工厂方法参数?
的问题是,在我的情况下,当我用很长的字符串第一个bean定义为一个值我的编辑断裂线串的最后一个字符,这将导致该字符串与额外的空格传递给Suppliers.ofInstance
后并在结果它打破了我的代码。
第二个定义对于空格更加严格,但是,令人惊讶的是,它不起作用(尽管类型是在type属性中指定的,它可能不适用泛型类型)。
我可以强迫Spring忽略<value>
标记中的空白吗?
或者我正确使用<constructor-arg type="java.lang.String" value="someReallyLongValue" />
?或者我应该提交一个问题,因为它是一个Spring错误?
我不想对字符串做任何假设(即在这里使用string.trim()
)。
首先,将您的XML编辑器配置为不自动插入换行符。如果没有这样的选项,改变编辑器;) – 2012-03-27 08:05:46
@YvesMartin我可以配置我的编辑器来这样做,但如果其他人将来做格式化(Eclipse中简单的'CSf'),我不喜欢应用程序将因此而被打破。 – Xaerxess 2012-03-27 08:50:11
这样的问题将永远存在。您应该将这些文本信息移动到属性文件中。 – 2012-03-27 09:27:54