在spring中获取工厂类的servletcontext

时间:2010-06-24 23:42:30

标签: java spring servlets

我想创建工厂类。例如是FooFactory。在Foo实例化之前,必须将FooFacoty注入ServletContext到构造函数。我的代码段如下:

public class FooFactory() {
    public static Foo getFoo() {
        ctx = //getservlet context
        Foo foo = new Foo(ctx);

            return foo;
    }
}

3 个答案:

答案 0 :(得分:3)

编辑:您可以使用ServletContextFactoryBean。然后,您可以将对此的引用传递给您的工厂(例如,作为方法参数)。喜欢这个

   <bean id="servletContext" class="org.springframework.web.context.support.ServletContextFactoryBean"/>

   <bean id="foo" class="FooFactory" factory-method="getFoo">
      <constructor-arg index="0" ref="servletContext"/>
   </bean>

然后,您将FooFactory.getFoo更改为

   public static Foo getFoo(ServletContext ctx) {
        Foo foo = new Foo(ctx);
        return foo;
   }

我知道没有直接的方式,但你可以通过实现ServletContextAware或ApplicationContextAware间接地做到这一点。

This article描述了详细信息。

答案 1 :(得分:3)

我在寻找如何做到这一点时遇到了这篇文章。它帮助我作为一个起点,但由于ServletContextFactoryBean在春季3被弃用,我不得不尝试不同的东西。

我找到了两个选项:

@Autowired
public AnAutowiredConstructor(WebApplicationContext webApplicationContext)
{
    servletContext = webApplicationContext.getServletContext();
}

或者您可以实施org.springframework.web.context.ServletContextAware

public class SomeClass implements ServletContextAware
{
    public void setServletContext(ServletContext servletContext)
    {
    }
}

答案 2 :(得分:1)

您可以使用xml直接将Spring WebApplicationContext保存的ServletContext实例注入到您的bean中:

<bean id="myBean" class="foo.bar.SomeClass">
    <constructor-arg ref="servletContext"/>

确实,servlet上下文在应用程序上下文中注册为“servletContext”。见http://docs.spring.io/spring/docs/4.0.x/javadoc-api/org/springframework/web/context/WebApplicationContext.html#SERVLET_CONTEXT_BEAN_NAME。也适用于Spring 3.x