【问题标题】:Spring MVC 3 getInitParameterSpring MVC 3 获取初始化参数
【发布时间】:2011-08-15 01:55:05
【问题描述】:

当我之前在没有 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,并且是 n00b。每次看到没有id的豆子,我的脑洞就翻了XD

【问题讨论】:

    标签: java spring servlets spring-mvc


    【解决方案1】:

    我想你可以在控制器中 @InjectServletContext,然后从那里获取参数。

    最好将@Value 与特定的PropertyPlaceholderConfigurer 一起使用。 See this answer

    【讨论】:

    • 关于您的第一个建议:我知道一旦我引用了ServletContext,我知道如何注入它,但是我从哪里得到呢?
    • @Bart van Heukelom 你注入它(使用@Inject@Autowired)。 Spring 负责获取它,而不是你。
    • 是的,我现在正在使用@Inject,它可以工作。这有点巫毒,但现在很好:p
    【解决方案2】:

    您真的需要这些作为 Servlet 上下文中的初始参数吗?

    在 Spring 中,您可以使用 PropertyPlaceholderConfigurer 将值从属性文件中注入到您的 bean 中。

    【讨论】:

    • 是的,它们应该来自 servlet 上下文,因为这是注入本地配置数据而不将其放入 webapp 的唯一位置。即使我将所有配置都放在一个属性文件中,我也需要使用初始化参数插入该文件的位置,我可以在 Tomcat 的上下文文件中为此应用程序指定该位置。
    • 一个 PropertyPlaceholderConfigurer 在你的 Spring 上下文文件中配置,带有一个通常从类路径加载的文件的路径。然后,您可以将值注入其他带有 <property name="foo" value=${foo}"/> 之类的引用的 bean。
    • 是的,我知道,但是我不能将配置放在类路径中,因为这意味着将其放在 webapp 的根目录中,这对部署者来说应该是一个黑盒子(当你拥有多个应用实例,例如用于测试和实时)。
    • 从类路径加载只是一种选择,您也可以从文件系统中的任何绝对路径加载。无论如何,使用 propertyPlaceholders 的优点只是将值注入到 Spring bean 中,这些类可以保持对 Servlet 环境的无知——同一个类可以在非 web 应用程序中重用。
    • 绝对路径也好不了多少,所以路径必须从外部传入。初始化参数非常适合。我确实同意注入的优势,这就是为什么我将 servlet 上下文包装在 Config 类中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多