Spring:如何隐藏依赖注入的bean?

时间:2011-03-02 14:54:03

标签: java spring dependency-injection

情况是我有两个不同的资源包,一个是普通的,另一个是更具体的资源包。它们不共享任何消息密钥。

一般情况:

<bean id="messageSourceGlobal" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basename" value="messages/messagesGlobal" />
</bean>

我在我的特定文件中包含了一般文件(显然是不同的文件):

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basename" value="messages/messages" />
    <property name="parentMessageSource" ref="messageSourceGlobal" />
</bean>

然后Java代码自动启动它:

@Autowired
private MessageSource messages;

这会在启动web-app时导致异常,因为找到了两个MessageSource。显然我可以使用@Qualifier向Spring说明我想要的东西。但是,一般资源包不会单独使用。因此,我认为在这种情况下隐藏一般资源包从依赖注入是有意义的。其中一个好处是其他人不会遇到“重复”。

这可能吗?我该怎么做?

2 个答案:

答案 0 :(得分:5)

当然,您可以在要隐藏的bean的定义上添加autowire-candidate="false"

答案 1 :(得分:2)

在许多情况下,最好使用primary="true"@Primary宣传一个bean,而不是使用autowire-candidate="false"降低所有其他候选人。