如何在Spring XML元数据配置中为bean设置ServletContext属性


问题内容

我尝试在此处搜索,但找不到解决方案。我有一些类似下面的XML元数据。

<bean class="javax.servlet.ServletContext" id="servletContext" />

<bean class="com.abc.ProductController">
    <property name="servletContext" ref="servletContext"/>
</bean>

通过这种配置,我得到一个例外,说这"javax.servlet.ServletContext"是一个接口,它无法使用id创建bean
servletContext。ProductController类位于无法修改的某个jar中,但我希望将其作为应用程序中的bean。它具有自动关联的ServletContext属性。


问题答案:

如果您需要ServletContext在XML配置spring应用程序中创建Bean
,则可以使用BeanFactory<ServletContext>实现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;
    }

}

然后可以声明:

<bean class="org.app.ServletContextFactory" id="servletContext" />

<bean class="com.abc.ProductController">
    <property name="servletContext" ref="servletContext"/>
</bean>