2015-09-21 2 views
1

Я расширяю полный продукт под названием Hippo CMS с помощью моего собственного интерфейса REST. Hippo CMS использует Apache CXF для отдыха и получает определения ресурсов из весеннего компонента, определенного где-то в источниках CMS Hippo. Это определение выглядит следующим образом:Переопределить весовой компонент, определенный xml, в конфигурации на основе Java

<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 боб с моим собственным боба. Он отлично работает на основе конфигурации 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(name = "customRestPlainResourceProviders") 
public ListFactoryBean customRestPlainResourceProviders() { 
    ListFactoryBean listFactoryBean = new ListFactoryBean(); 
    listFactoryBean.setSourceList(
    Lists.newArrayList(
     new SingletonResourceProvider(
     new FolderStructureResource(repository()) 
    ) 
    ) 
); 
    return listFactoryBean; 
} 

Есть ли способ переопределить компонент, определенный в конфигурации XML, с компонентом, созданным в классе конфигурации Java?

+0

Проверьте, настроена ли пружина для сканирования указанного класса или пакета. –

+0

Это потому, что конфигурация работает отлично сама по себе. Я могу определить bean-компонент в этой конфигурации на основе java и автоподвести его, например. FolderStructureResource определяется в xml. –

+0

xml не нужно сканировать классы java. Подлинность на основе аннотаций должна быть проверена весной. Проверьте тег

ответ

3

Какую версию весны вы используете? Я считаю, что эти проблемы рассматриваются в 4.2.

+0

Я использую Spring 4.1.4. Есть ли способ исправить это в этой версии? –

+1

https://jira.spring.io/browse/SPR-9567 –

+0

Я справился с этим, указав этот один компонент в конфигурации xml и других компонентах в конфигурации на Java. Я изменю его, когда hippo cms перенесет весну 4.2. –

Смежные вопросы