在基于 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 中得到了解决。
我正在使用我自己的 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 中得到了解决。