【问题标题】:Difference between root and web applicationContext spring mvcroot和web applicationContext spring mvc之间的区别
【发布时间】:2014-09-01 17:16:39
【问题描述】:

我是新的 spring mvc 并试图了解一些基础知识。 有些事情对我来说很清楚,但我仍然对 Spring 基础知识有一些疑问。

首先让我把我清楚的事情说出来。(如果我错了,请反对我)。

spring mvc中有两种xml文件:rootApplicationContext.xml和webApplicationContext.xml

web.xml 中的context-param 标记定义了rootApplicationContext.xml 具有 DispatcherServlet(充当表单控制器)的 servlet 标记定义了 webApplicationContext.xml 参数, 并且 rootApplicationContext 的 bean 在所有 webApplicationContext.xml 文件中都是可访问的

应用程序所有部分所需的功能(如休眠和 DAO 配置)都写在 rootApplicationContext 中

现在这是我的问题:

(1)我认为 rootApplicationContext 是在应用程序加载时加载的,而 webApplicationContext 是在加载 DispatcherServlet 类时加载的。 那么 DispatcherServlet 类是什么时候加载的呢?

(2)controller-action的对象是在什么时候创建的,是在应用加载时还是在调用时?

(3)为控制器动作、单例或原型创建了哪种类型的对象?

(3)哪个xml应该包含filter、interceptor、AOP类的bean定义,为什么?

对于我的一些疑问,参考了 spring 文档,但我仍然有一些疑问。

谢谢

【问题讨论】:

标签: java spring spring-mvc


【解决方案1】:

你在所有方面都是对的,这是一个很好的开始。 所有 servlet 要么在容器启动时加载(如果您在 web.xml 中指定 load-on-startup 值),要么在容器感觉不同时加载,但这通常不是您需要担心的事情。很明显,当需要时,单例会在开始时加载,原型。大多数对象都是单例的,因此应该是无状态的。仅在您知道可以保持状态的情况下保持状态是个好主意。您在将使用它们的上下文中定义 bean。拦截器仅在 Web 上下文中使用,所以这就是您放置它们的地方。相同的逻辑适用于其他所有内容,但请注意在 Spring MVC 之外使用的与 Web 相关的类,例如您自己的过滤器等。只有实际命中 DispatcherServlet 的请求才会知道 Spring MVC 的内容。

【讨论】:

    猜你喜欢
    • 2015-12-31
    • 2012-07-27
    • 2013-04-29
    • 2018-03-24
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    相关资源
    最近更新 更多