Initialize FrameworkServlet property sources eagerly
Prior to this change, FrameworkServlet#configureAndRefreshWebApplicationContext called #postProcessWebApplicationContext(wac) and #applyInitializers(wac) prior to #refresh, but because servlet-based property source stubs were not replaced until #refresh, any post-processing or initialization routines could not benefit from accessing the Environment to retrieve properties from the ServletContext or ServletConfig. The workaround to this problem is detailed in SPR-9610 - the user simply needed to call WebApplicationContextUtils#initServletPropertySources manually within their ApplicationContextInitializer (or overridden #postProcessWebApplicationContext method) This commit ensures that FrameworkServlet#configureAndRefreshWebApplicationContext calls WebApplicationContextUtils#initServletPropertySources eagerly, prior to invoking #postProcessWebApplicationContext and #applyInitializers. Related Javadoc has also been updated throughout to clarify the behavior of #initServletPropertySources, when it can be called and what the effects are, etc. Note also that a reproduction issue was added to demonstrate the problem and verify its resolution [1]. [1]: https://github.com/SpringSource/spring-framework-issues/tree/master/SPR-9610 Issue: SPR-9610
This commit is contained in:
@@ -634,6 +634,12 @@ public abstract class FrameworkServlet extends HttpServletBean {
|
||||
wac.setNamespace(getNamespace());
|
||||
wac.addApplicationListener(new SourceFilteringListener(wac, new ContextRefreshListener()));
|
||||
|
||||
// the wac environment's #initPropertySources will be called in any case when
|
||||
// the context is refreshed; do it eagerly here to ensure servlet property sources
|
||||
// are in place for use in any post-processing or initialization that occurs
|
||||
// below prior to #refresh
|
||||
wac.getEnvironment().initPropertySources(getServletContext(), getServletConfig());
|
||||
|
||||
postProcessWebApplicationContext(wac);
|
||||
|
||||
applyInitializers(wac);
|
||||
|
||||
Reference in New Issue
Block a user