Spring bean id冲突

时间:2012-10-19 09:51:25

标签: spring javabeans autowired

我是一个新的Spring用户,并且可能做错了(由于对Spring IOC的概念/内部的误解),所以希望这个问题能够得到一个简单的答案。

这是我正在尝试做的事情:我正在尝试使用来自两个不同第三方库的两个bean:

<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字段需要与类名相同。

帮助??

3 个答案:

答案 0 :(得分:1)

您是否尝试过更改ididname属性都取决于你自己,并不要求它们与类名相同,只是更容易弄清楚bean是“那样”的。

当bean为@Autowired时,Spring将使用基于名称,类型(我记得默认)或构造函数的最佳匹配,如果Validator类中的ValidatedString是一个org.owasp.esapi.ESAPI那么就是注入的东西。

干杯,

答案 1 :(得分:0)

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

问题解决了。

答案 2 :(得分:0)

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

ID和factory-method之类的引用通常取决于您。