在基于 java 的配置中覆盖 xml 定义的 spring bean

Override xml-defined spring bean in java-based configuration

我正在使用我自己的 REST 接口扩展名为 Hippo CMS 的完整产品。 Hippo CMS 正在使用 Apache CXF 进行休息,并从 Hippo CMS 源中某处定义的 spring bean 获取资源定义。这个定义看起来像这样:

<bean id="jaxrsRestPlainResourceProviders" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
  <property name="targetClass" value="org.apache.commons.collections.ListUtils" />
  <property name="targetMethod" value="union" />
  <property name="arguments">
    <list>
      <ref bean="customRestPlainResourceProviders" />
      <ref bean="defaultRestPlainResourceProviders" />
    </list>
  </property>
</bean>

<bean id="defaultRestPlainResourceProviders" class="org.springframework.beans.factory.config.ListFactoryBean">
  <property name="sourceList">
    <list>
    </list>
  </property>
</bean>

<!-- Default empty list of custom plain resource providers to be overriden. -->
<bean id="customRestPlainResourceProviders" class="org.springframework.beans.factory.config.ListFactoryBean">
  <property name="sourceList">
    <list>
    </list>
  </property>
</bean>

我需要用我自己的 bean 覆盖 customRestPlainResourceProviders bean。它在 XML 配置下工作正常,如下所示:

<bean id="customRestPlainResourceProviders" class="org.springframework.beans.factory.config.ListFactoryBean">
  <property name="sourceList">
    <list>
      <bean class="org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider">
        <constructor-arg>
          <bean class="com.xxx.rest.FolderStructureResource"/>
        </constructor-arg>
      </bean>
    </list>
  </property>
</bean>

但是如果我在 Java 配置 class 中定义一个 bean,它就不起作用(在其他 bean 的情况下完全可以工作):

@Bean(name = "customRestPlainResourceProviders")
public ListFactoryBean customRestPlainResourceProviders() {
  ListFactoryBean listFactoryBean = new ListFactoryBean();
  listFactoryBean.setSourceList(
    Lists.newArrayList(
      new SingletonResourceProvider(
        new FolderStructureResource(repository())
      )
    )
  );
  return listFactoryBean;
}

有没有办法用 Java 配置 class 中创建的 bean 覆盖 XML 配置中定义的 bean?

您使用的 spring 是什么版本?我相信这个问题在 4.2 中得到了解决。