2012-10-19 97 views
0

我是一個新的Spring用戶,並且可能做錯了事(由於對IOC概念/內部的誤解),所以希望這個問題能夠得到一個簡單的答案。Spring bean id衝突

這裏就是我想要做的事:我想用兩個豆從兩個不同的第三方庫:

<bean id="validator" class="org.owasp.esapi.ESAPI" factory-method="validator"/> 
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/> 

的問題是,它們都具有相同的ID,這是不允許。我試圖自動連線ESAPI驗證器,並且如果我正確地遵循,則Spring會使用LocalValidatorFactoryBean。

所以我使用ESAPI驗證將被簡化類:

public class ValidatedString { 
    @Autowired(required=true) 
    Validator stringValidator; 

    public void doSomethingWithTheValidator() { 
     // do something 
    } 
} 

但我不能理解的是,我怎麼能更改ID。兩者都從一個不同的包中返回一個Validator類,並且我的印象是id字段需要與類名相同。

幫助??

回答

1

你有沒有試過改變id的? idname這兩個屬性都是由您自己決定的,並不要求它們與類名相同,只是更容易弄清楚這些bean是「那樣」。

當豆@Autowired,Spring將使用基於兩種名稱,類型(默認情況下我記得)或構造和最佳匹配,所以如果你在ValidatedStringValidatororg.owasp.esapi.ESAPI那麼這就是將被注入。

乾杯,

+0

仍在致力於解決真正的問題(這是另一個問題的一個項目),但我想這個ID只是一個小問題,我不得不取得進展。謝謝!! – TheZuck

0
<bean id="esapiValidator" class="org.owasp.esapi.ESAPI" factory-method="validator"/> 
<bean id="localValidator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/> 

問題解決了。

0
<bean id="validator" class="org.owasp.esapi.ESAPI" factory-method="validatorFactory"/> 
<bean id="validatorFactory" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/> 

代碼和參考文獻如factory-method通常取決於您。