2013-07-01 3 views
2

J'ai un contexte: propriété espace réservé défini dans mon application racine contexteSpring WebApplicationContext ne partage pas PropertyPlaceHolder défini dans RootApplicationContext?

<context:property-placeholder location="classpath:runtime/runtime.properties" 
    ignore-unresolvable="true" /> 

et le contexte d'application est enregistré dans web.xml

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
     classpath:applicationContext.xml 
    </param-value> 
</context-param> 

et j'ai un servlet répartiteur:

<servlet> 
    <servlet-name>dispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>dispather</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

J'utilise l'un des espaces réservés dans dispatcher-servlet.xml mais cela ne semble pas fonctionner:

Il semble que les beans dans WebApplicationContext puissent faire référence à des beans dans RootApplicationContext mais ne puissent pas partager des espaces réservés définis dans RootApplicationContext?

Ai-je raté quelque chose?

Répondre

2

La propriété-espace réservé est en réalité un post-processeur de bean. Il ne peut s'appliquer qu'aux haricots dans le même contexte. la propriété-espace réservé définie dans le contexte de l'application racine n'affecte donc pas les beans du répartiteur-répartiteur (WebApplicationContext peut faire référence aux beans dans RootApplicationContext mais RootApplicationContext ne peut pas faire référence aux beans dans WebApplicationContext).

J'ai résolu ce problème en utilisant une façade de configuration et el.

Dans le contexte de l'application racine:

<context:property-placeholder location="classpath:runtime/runtime.properties"/> 

<bean id="configurations" class="x.y.z.Configurations"> 
    <property name="inboundGatewayPath" value="${myplaceholder}" /> 
</bean> 

En application web contexte:

<int-http:inbound-gateway path="#{configurations.inboundGatewayPath}" .../> 
Questions connexes