在使用Spring時,我面臨一個奇怪的問題。我有一個類需要一個集合作爲輸入,因爲該類是基礎框架,所以我無法更改它。 這裏是它的聲明如何定義一個自定義的集合實現用於<set></set>
private Set evaluate;
public Set getEvaluate()
{
return evaluate;
}
public void setEvaluate(Set evaluate)
{
this.evaluate = evaluate;
}
我是春天的文件我有以下條目
<bean id="customService"
class="com.platform.impl.DefaultFrameworkService"
scope="tenant" parent="abstractService">
<property name="evaluate">
<set>
<ref bean="bean1" />
<ref bean="bean2" />
<ref bean="bean3" />
<!-- inject new bean here. -->
<ref bean="bean4" />
</set>
</property>
這裏DefaultFrameworkService
需要設置爲輸入。所以我試圖將一個新的bean注入到底層服務。
我的問題是,當春天讀取這個文件它sprong.xml這個<set>
進入轉換爲LinkedHashSet
,比嘗試將這些值設置爲private Set evaluate
最終拋出異常。
雖然我總是可以覆蓋DefaultFrameworkService
,並且可以將該LinkedHashSet
轉換爲設置,但希望尋找更好的方法。
異常即時得到是
Failed to convert property value of type 'java.util.LinkedHashSet' to required type 'java.util.Set' for property 'evaluate'
我怎樣才能讓春天來傳遞值僅作爲set
而不是LinkedHashSet
更新
我無法將所有這些即便如此我玩了一下創造了一個新的自定義類,即CustomDefaultFrameworkService
與以下implimentation
public class CustomDefaultFrameworkService extends DefaultFrameworkService
{
Logger log = Logger.getLogger(CustomDefaultFrameworkService.class);
@SuppressWarnings("unused")
private Set evaluate;
/**
* @param evaluateStrategies
* the evaluateStrategies to set
*/
@Override
public void setEvaluate(final Set evaluate)
{
log.info("Setting values to super class. Total values being injected are " + evaluateStrategies.size());
super.setEvaluate(evaluate);
}
}
我可以設置地圖超級類。這件事讓我更加困惑。
甲'LinkedHashSet' 「是」'Set'。它拋出了什麼錯誤? – Bringer128
爲什麼你要在同一個集合中兩次使用'?也許這就是失敗? –
@ Bringer128:請參閱我的帖子,我已更新它。 –