3

我有一个 context:property-placeholder 在我的根应用程序上下文中定义

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

并且应用程序上下文在 web.xml 中注册

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

我有一个调度程序servlet:

<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>

我在 dispatcher-servlet.xml 中使用了占位符之一,但它似乎不起作用:

<int-http:inbound-gateway path="${myplaceholder}" .../>

似乎 WebApplicationContext 中的 bean 可以引用 RootApplicationContext 中的 bean,但不能共享 RootApplicationContext 中定义的占位符?

我错过了什么?

4

1 回答 1

2

属性占位符实际上是一个 bean 后处理器。它只能应用于相同上下文中的 bean。因此在根应用程序上下文中定义的属性占位符不会影响调度程序-servlet 中的bean(WebApplicationContext 可以引用RootApplicationContext 中的bean,但RootApplicationContext 不能引用WebApplicationContext 中的bean)。

我通过使用配置外观和 spring el 解决了这个问题。

在根应用程序上下文中:

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

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

在 Web 应用程序上下文中:

<int-http:inbound-gateway path="#{configurations.inboundGatewayPath}" .../>
于 2013-09-25T15:31:34.367 回答