0

次々に実行しなければならないコマンドのリストを持つクラスがあります。コマンドが繰り返される可能性があり、コマンドごとにBeanを作成したくありません。

私が念頭に置いているのは次のようなものです。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="parent" class="Parent">
    <property name="commands">
        <list value-type="Command">
            <value>OneCommand</value>
            <value>OtherCommand</value>
            <value>OneCommand</value>
        </list>
    </property>
</bean>
</beans>

そして、値ごとにクラスのコンストラクターが呼び出され、新しいCommandオブジェクトがリストに追加されます。

そのxmlファイルを使用してテストを実行すると、次の例外が発生します。

...

Caused by: java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [org.fideliapos.middleoffice.provisioning.ProvisioningCommand] for property 'commands[0]': no matching editors or conversion strategy found
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:231)
at org.springframework.beans.TypeConverterDelegate.convertToTypedCollection(TypeConverterDelegate.java:520)
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:173)
at org.springframework.beans.BeanWrapperImpl.convertIfNecessary(BeanWrapperImpl.java:447)
... 42 more

私は何が間違っているのですか?Springにコンストラクターを呼び出すにはどうすればよいですか?

4

1 に答える 1

1

PropertyEditorSupportSpring が String からカスタム ドメイン オブジェクトに変換する方法を認識できるように、実装するクラスを作成できます。

例:

public class CommandPropertyEditor extends PropertyEditorSupport {
  public void setAsText(String text) {
    // create a command from the given text
    Command command = Command.createFromString(text);
    setValue(command);
  }
}

そして、それを Spring 用に参照します。

<bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
  <property name="customEditors">
    <map>
      <entry key="Command" value="CommandPropertyEditor"/>
    </map>
  </property>
</bean>
于 2012-10-25T15:55:44.903 に答える