2010-06-24 45 views
2

我想创建工厂类。例如是FooFactory。在Foo实例之前,必须将FooFacoty注入ServletContext到构造函数中。我已经片断如下:春季获取工厂类的servletcontext

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

      return foo; 
    } 
} 

回答

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

注意:'ServletContextFactoryBean'在Spring 3中已弃用 – skaffman 2010-06-25 07:34:43

+0

噢,那可怜?有其他选择吗? – mdma 2010-06-25 11:36:54

3

我在查找这篇文章的时候遇到过这个问题。它帮助我作为一个起点,但由于ServletContextFactoryBean在Spring 3中被弃用,我不得不尝试一些不同的东西。

我发现了两个选项:

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

也可以实现org.springframework.web.context.ServletContextAware

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