gpt4 book ai didi

java - 如何使用 Spring 创建不同类型对象的列表,但它们不是 bean

转载 作者:行者123 更新时间:2023-12-01 15:05:06 25 4
gpt4 key购买 nike

我有一个类,其中包含必须依次执行的命令列表。命令可能会重复,我不想为每个命令创建一个 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 调用构造函数?

最佳答案

您可以创建一个实现 PropertyEditorSupport 的类,以便 Spring 知道如何从字符串转换为您的自定义域对象。

示例:

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>

关于java - 如何使用 Spring 创建不同类型对象的列表,但它们不是 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13072125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com