2012-10-19 95 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通常取决于您。