0

Tuple2パラメータのタイプを明示的に宣言するfromspring構成を作成できるようにしたいと思います。

<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)私が望んでいるものではありません。


これを知らなかった人のために編集してください。SpringPropertyEditorsを使用して次のように文字列からインスタンスを作成します。

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

4

2 に答える 2

1

クラス TimeZone の静的メソッド getTimeZone() を使用して、TimeZone パラメータを明示的に作成する必要があります。

<bean class="scala.Tuple2">
  <constructor-arg index="0">
    <bean class="java.util.TimeZone" factory-method="getTimeZone">
      <constructor-arg value="Europe/London"/>
    </bean>
  </constructor-arg>
  <constructor-arg index="1">
    <bean class="java.util.TimeZone" factory-method="getTimeZone">
      <constructor-arg value="America/New_York"/>
    </bean>
  </constructor-arg>
</bean>
于 2009-11-11T16:37:06.350 に答える
0

Springは、指定した構文を通じて特別にサポートされているため、Mapで機能している可能性があります。

<map key-type="java.util.TimeZone" value-type="java.lang.Integer">

Stringこの場合、Springは、提供されたtypeの値と、要求されたtypesTimeZoneおよびの不一致に基づいて、プロパティエディターを呼び出す必要があると判断する可能性がありIntegerます。

于 2010-01-23T23:52:42.680 に答える