Я хочу иметь возможность создать Tuple2
из весеннего конфига, где я явно объявляю типы своих параметров:
<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:
Ошибка создания бина с именем 'scala.Tuple2 # 6504bc', определенного в файле [C: \ Work \ myproj \ config \ test \ myproj.xml]: неудовлетворенная зависимость, выраженная через аргумент конструктора с индексом 0 типа [java.lang.Object] :
Неоднозначные типы аргументов конструктора - вы указали правильные ссылки на компоненты в качестве аргументов конструктора?
Ошибка исчезнет, если я не объявлю явное 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 может выяснить параметры универсального типа из ваших методов установки. За исключением того, что это не работает в случае моего Tuple2
!