I tried searching here on SO but i couldn\'t find a solution. I have some XML metadata like the following.
You cannot reference the servlet context in your XML like this because its lifecycle is controlled by the servlet container.
The solution is to have com.abc.ProductController
implement ServletContextAware and then Spring will set it for you.
With java config use ServletContextFactory created by Serge Ballesta above and:
@Configuration
public class WebAppConfiguration {
@Autowired
private ServletContextFactory servletContextFactory;
@Bean
public ServletContextFactory servletContextFactory() {
return new ServletContextFactory();
}
}
If you need to create a bean for ServletContext
in a XML config spring application, you could use a BeanFactory<ServletContext>
implementing ServletContextAware
public class ServletContextFactory implements FactoryBean<ServletContext>,
ServletContextAware{
private ServletContext servletContext;
@Override
public ServletContext getObject() throws Exception {
return servletContext;
}
@Override
public Class<?> getObjectType() {
return ServletContext.class;
}
@Override
public boolean isSingleton() {
return true;
}
@Override
public void setServletContext(ServletContext servletContext) {
this.servletContext = servletContext;
}
}
You can then declare :
<bean class="org.app.ServletContextFactory" id="servletContext" />
<bean class="com.abc.ProductController">
<property name="servletContext" ref="servletContext"/>
</bean>
Just autowire the context in your controller:
@Autowired
private ServletContext context;