Cómo resolver programáticamente el marcador de posición de propiedad en Spring

Actualmente trabajo en una aplicación web basada en Spring 3.1.0.M1, basada en anotaciones, y tengo un problema para resolver marcadores de posición de propiedad en un lugar específico de mi aplicación.

Aquí está la historia.

1) En el contexto de mi aplicación web (cargado por DispatcherServlet), tengo

mvc-config.xml:

<!-- Handles HTTP GET requests for /resources/version/**  -->
<resources mapping="/${app.resources.path}/**" location="/static/" cache-period="31556926"/> 

...

<!-- Web properties -->
<context:property-placeholder location="
    classpath:app.properties
    "/>

2) Dentro de las propiedades de la aplicación, hay 2 propiedades, entre otras:

app.properties:

# Properties provided (filtered) by Maven itself
app.version: 0.1-SNAPSHOT
...

# Static resources mapping
app.resources.path: resources/${app.version}

3) Tengo una etiqueta personalizada JSP en mis plantillas JSP 2.1. Esta etiqueta es responsable de la construcción de la ruta de recursos completa dependiendo de la configuración del entorno, la versión de la aplicación, la selección del tema de primavera, etc. @

Mi problema es que no puedo resolver $ {app.resources.path} correctamente en mi implementación de etiqueta personalizada JSP. Las etiquetas personalizadas JSP son administradas por el contenedor de servlet, no por Spring, y por lo tanto no participan en DI. Por lo tanto, no puedo usar el @Value habitual ("$ {app.resources.path}") y Spring lo resuelve automáticamente.

Todo lo que tengo es la instancia de contexto de la aplicación web, así que tengo que resolver mi propiedad mediante programación.

Hasta ahora lo intenté:

ResourceTag.java:

// returns null
PropertyResolver resolver = getRequestContext().getWebApplicationContext().getBean(PropertyResolver.class);
resolver.getProperty("app.resources.path");


// returns null, its the same web context instance (as expected)
PropertyResolver resolver2 = WebApplicationContextUtils.getRequiredWebApplicationContext(pageContext.getServletContext()).getBean(PropertyResolver.class);
resolver2.getProperty("app.resources.path");


// throws NPE, resolver3 is null as StringValueResolver is not bound
StringValueResolver resolver3 = getRequestContext().getWebApplicationContext().getBean(StringValueResolver.class);
resolver3.resolveStringValue("app.resources.path");


// null, since context: property-placeholder does not register itself as PropertySource
Environment env = getRequestContext().getWebApplicationContext().getEnvironment();
env.getProperty("app.resources.path");

Así que ahora estoy un poco atrapado con eso. Sé que la capacidad de resolver mi marcador de posición está en algún lugar del contexto, simplemente no sé la forma correcta de hacerlo.
Cualquier ayuda o idea para verificar son muy apreciadas.

Respuestas a la pregunta(5)

Su respuesta a la pregunta