2

我正在使用我自己的 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>

我需要customRestPlainResourceProviders用我自己的 bean 覆盖 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 配置类中定义一个 bean(在其他 bean 的情况下完全可以正常工作),它就不起作用:

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

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

4

1 回答 1

2

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

于 2015-09-21T10:43:08.490 回答