Spring MVC 3 getInitParameter

3

以前在不使用Spring的servlet应用程序开发中,我可以像这样读取我的servlet中的配置参数:

@Override public void init() throws ServletException { 

    ServletContext sc = getServletContext();
    String someSetting = sc.getInitParameter("someSetting");

}

然而,我现在正在使用Spring MVC开发应用程序,这意味着我不再拥有自己的servlet,而是使用Spring的DispatcherServlet

那么,我如何访问spring-servlet.xml中的初始化参数以将它们传递给我的一个bean?

我正在使用Spring 3,并且对此一窍不通。每当我看到一个没有ID的bean时,我的脑袋都要炸掉XD。

2个回答

3

我猜您可以在控制器中@Inject一个ServletContext,并从其中获取参数。

更好的方法是,与特定的PropertyPlaceholderConfigurer一起使用@Value查看此答案


关于您的第一个建议:我知道一旦我有对它的引用,如何注入ServletContext,但是我从哪里获取它? - Bart van Heukelom
@Bart van Heukelom,你可以使用@Inject或者@Autowired来注入它。Spring会自动获取它,而不是由你来操作。 - Bozho
是的,我现在正在使用@Inject,它可以正常工作。 这有点像巫术,但现在很好:p - Bart van Heukelom

0
你真的需要将这些参数初始化到Servlet上下文中吗?
在Spring中,你可以使用PropertyPlaceholderConfigurer从属性文件中注入值到你的bean中。

1
是的,它们应该来自servlet上下文,因为这是唯一一个可以注入本地配置数据而不将其放在Web应用程序内部的位置。即使我将所有配置放在属性文件中,我仍需要使用init参数插入该文件的位置,我可以在Tomcat上下文文件中为此应用程序指定该参数。 - Bart van Heukelom
在您的Spring上下文文件中配置了PropertyPlaceholderConfigurer,该文件的路径通常从类路径加载。然后,您可以使用诸如<property name="foo" value=${foo}"/>之类的引用将值注入到其他bean中。 - matt b
1
我知道,但我不能把配置文件放在类路径中,因为这意味着把它放在 Web 应用的根目录中,而这应该是部署者不可见的黑匣子(并且如果您有多个应用程序实例,例如测试和生产环境下,这也会带来麻烦)。 - Bart van Heukelom
从类路径加载只是一种选项,您还可以从文件系统中的任何绝对路径加载。无论如何,使用propertyPlaceholders仅将值注入到Spring bean中的优点在于类可以保持对Servlet环境的无知 - 相同的类可以在非Web应用程序中重复使用。 - matt b
1
绝对路径也不是更好的选择,因此路径必须从外部传入。初始化参数非常适合这个任务。我同意注入的优点,这就是为什么我将servlet上下文封装在“Config”类中的原因。 - Bart van Heukelom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接