簡體   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