繁体   English   中英

如何使用Spring 4 XML配置Java 8 java.util.Optional

[英]How to configure Java 8 java.util.Optional using Spring 4 xml

我正在尝试使用Spring XML配置使用工厂方法Optional.of的java.land.Optional对象。 但是我一直收到错误消息。 我正在使用Spring 4和Java 8。

<bean id="eventMapping" class="com.betfair.service.sogei.sem.dto.EventMapping">
    <constructor-arg name="sogTeam1Id" ref="sogTeam1Id"/>
</bean>

<bean id="sogTeam1Id" class="java.util.Optional" factory-method="of">
    <constructor-arg type="java.lang.Object" ref="team1Id"/>
</bean>

<bean id="team1Id" class="java.lang.Long">
    <constructor-arg value="1000"/>
</bean>

当我尝试运行测试时,在spring尝试创建bean时出现异常:

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'eventMapping' defined in class path resource [test-data-provider.xml]: Unsatisfied dependency expressed through constructor argument with index 0 of type [java.util.Optional]: Could not convert constructor argument value of type [java.lang.Long] to required type [java.util.Optional]: Failed to convert value of type [java.lang.Long] to required type [java.util.Optional]; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.Long] to required type [java.util.Optional]: no matching editors or conversion strategy found

我也尝试过:

<bean id="sogTeam1Id" class="java.util.Optional" factory-method="of">
    <constructor-arg type="java.lang.Object" value="1000"/>
</bean>

在这种情况下,我会收到以下(类似)错误:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'updateEventDatePayload' defined in class path resource [test-data-provider.xml]: Cannot resolve reference to bean 'eventMapping' while setting constructor argument; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'eventMapping' defined in class path resource [test-data-provider.xml]: Unsatisfied dependency expressed through constructor argument with index 0 of type [java.util.Optional]: Could not convert constructor argument value of type [java.lang.String] to required type [java.util.Optional]: Failed to convert value of type [java.lang.String] to required type [java.util.Optional]; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [java.util.Optional]: no matching editors or conversion strategy found

这些错误说明无法将对象Long转换为对象Optional,但是有问题的方法是这样的:

public static <T> Optional<T> of(T var0);

我想要一个包含一个Long值的Optional对象。

有没有人遇到过这个问题,请提供一些见解? 谢谢!

您在配置“ eventMapping” bean时遇到问题。 您已在此处指定对“ team1Id”的引用,而不是“ Team1Id”。 您配置中的“ team1Id”类型为Long,因此它应该失败。 仅“ Team1Id”具有可选类型。 因此,您应该使用对此bean的引用。

通常,我建议避免使用几乎相同的bean来防止此类冲突。

所以最后,如果有人遇到同样的问题,这就是我使之工作的方式。 通过Spring表达语言。

<constructor-arg name="eventMapping" value="#{ T(java.util.Optional).of( 1)}"/>

使用factory-method =“ of”策略无法使其正常工作。

如上所述,使用Java配置更容易做到这一点,但是在这种情况下,我不得不使用xml config。

希望有帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM