我可以覆盖使用组件扫描实例化的spring bean吗?

时间:2010-05-20 13:55:09

标签: java spring spring-mvc

如果我在Spring 2.5中使用组件扫描,那么还要在xml中定义一个控制器。

我在应用程序上下文中获取此bean的两个实例吗?如果是,那么将为其相关的RequestMappings调用哪个实例?

<bean id="myController" class="domain.MyController">
         <property name="filters">
            <list>
                <ref local="filter1"/>
                <ref local="filter2"/>
            </list>
        </property>        
    </bean>

3 个答案:

答案 0 :(得分:1)

如果您要求Spring提供给定接口的bean,并且您有两个该接口的bean,那么您将从Spring容器中获得异常。

此规则的一个例外是,如果您的组件标有@Primary,或者XML bean的主属性设置为true。

答案 1 :(得分:0)

好问题,我不确定。我的猜测是,无论哪个首先被宣布,都会获胜。因此,如果您的<context:component-scan>首先出现,则自动检测到的组件将获得请求。如果您的<bean>排在第一位,那就赢了。

如果有疑问,请测试一下,不难发现。

更好的解决方案是使用<context:component-scan>的嵌套过滤器元素从扫描程序中明确排除组件。

答案 2 :(得分:0)

之前我意外地完成了这项操作,通常会导致多个应用程序上下文。虽然看起来像它的一切都运行良好,但数据库更改从未被提交过的通常是我必须如何跟踪它。