我希望能够Tuple2
从 spring 配置中创建一个我明确声明参数类型的地方:
<bean class="scala.Tuple2">
<constructor-arg index="0" value="Europe/London" type="java.util.TimeZone" />
<constructor-arg index="1" value="America/New_York" type="java.util.TimeZone" />
</bean>
这不起作用(我在我的配置文件中指定了相关的属性编辑器)。在运行时我收到错误:
原因:org.springframework.beans.factory.UnsatisfiedDependencyException:
创建文件 [C:\Work\myproj\config\test\myproj.xml] 中定义的名称为 'scala.Tuple2#6504bc' 的 bean 时出错:通过构造函数表示的依赖关系不满足类型为 [java.lang.Object] 的索引为 0 的参数:
构造函数参数类型不明确- 您是否将正确的 bean 引用指定为构造函数参数?
如果我不声明显式,错误就会消失type
- 但是当然Tuple2
我的程序中的只是一个(String, String)
不是我想要的。
对于那些不知道这一点的人,请编辑,Spring 使用PropertyEditor
s 从字符串创建实例,如下所示:
public class TimeZoneEditor extends java.beans.PropertyEditorSupport {
public void setAsText(String text) { setValue(TimeZone.getTimeZone(text)); }
public String getAsText() { return ((TimeZone)getValue()).getID(); }
}
现在我只是在我的配置中声明:
<bean id="customEditorConfigurer"
class="org.springframework.beans.factory.config.CustomEditorConfigurer">
<property name="customEditors">
<map>
<entry key="java.util.TimeZone">
<bean class="my.cleve.rutil.TimeZoneEditor"/>
</entry>
</map>
</property>
</bean>
嘿,我可以做这样的事情:
<map key-type="java.util.TimeZone" value-type="java.lang.Integer">
<entry key="Europe/London" value="4" />
</map>
或者,Spring 可以从您的 setter 方法中找出泛型类型参数。除了在我的情况下它似乎不起作用Tuple2
!