Spring配置问题

时间:2010-12-15 13:59:04

标签: java spring spring-mvc

我刚刚进入春天(我自己,所以我没有人问过愚蠢的问题)。

我对Spring的配置有几个问题(我使用的是3.0)。阅读手册,它说“主”配置是实例化所有bean的IoC容器之一。这样,当您实例化ApplicationContext时,您需要将xml与所有bean的配置位一起传递给它。

无论如何,当您使用Web MVC框架时,您实例化DispatcherServlet,然后创建一个包含servlet配置的名称的xml文件,并将您的内容放在那里。问题一:是这样吗?我的意思是xml文件代表我可以传递给applicationcontext构造函数的相同文件,还是那个不同的东西?如果我想配置整个applicationContext,我应该创建其他文件吗?怎么样?

更进一步,我看到调度程序servlet可能需要更多配置。就像你想要配置视图一样,如果要解析View bean和类似的情况,你必须编写一些配置。现在我看到很多教程都在谈论一个views.xml文件...这在手册中甚至没有提到(cntrl + f未找到)。我想知道这是程序员创建的文件,然后包含在DispatcherServlet中,或者是某个组件读取的默认值...我对此感到困惑。

我想知道整个ApplicationContext配置和dispatcherservlet之间的关系。如果存在其他xml文件的情况更多,我想知道在哪里可以找到相关的资源,因为文档非常混乱。

由于

2 个答案:

答案 0 :(得分:3)

  

无论如何,当您使用Web MVC框架时,您实例化DispatcherServlet,然后创建一个包含servlet配置的名称的xml文件,并将您的内容放在那里。问题一:是这样吗?我的意思是xml文件代表我可以传递给applicationcontext构造函数的相同文件,还是那个不同的东西?如果我想配置整个applicationContext,我应该创建其他文件吗?怎么样?

虽然从理论上讲,您可以在一个单一的Web应用程序上下文中定义所有bean,但通常认为按功能拆分上下文是一种好习惯。

e.g。

  • 一个上下文将定义spring mvc web controllers
  • 可以定义服务层
  • 可以定义持久性/ dao层

您可以使用<import ...>声明将这些上下文导入主Web上下文。

以下是春季参考文献中的相关部分:

答案 1 :(得分:3)

您也可以通过在web.xml中定义多个文件来分割applicationContext或servlet.xml

<init-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>
    /WEB-INF/spring/spring-beans1.xml
    /WEB-INF/spring/spring-beans2.xml
  </param-value>
</init-param>

查看此问题Use a ContextLoaderListener in accordance with DispatchServlet

当我开始使用spring时,我需要了解的一件事是,应用程序上下文的默认范围是 singleton ,而DispatcherServlet 请求的默认范围。这意味着虽然在应用程序启动时,ApplicationContext和DispatcherServlet都是startet,但如果从应用程序上下文中获取bean,只要应用程序正在运行,它就始终是相同的对象,而如果你得到的话来自 servlet.xml 的bean总是为每个http请求重新实例化。

请参阅http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html#beans-factory-scopes

applicationContext始终在servlet.xml中自动提供

您也可以使用http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/web/context/support/WebApplicationContextUtils.html

自行获取applicationContext