该用户从未签到
|
springMVC应用中的容器
1、容器类型
在SpringMVC中有两种Spring容器。
(1)Spring容器
这是由Spring管理的容器,也称为根容器。
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
(2)SpringMVC中的容器
在Spring MVC中,每个DispatcherServlet都持有一个自己的上下文对象WebApplicationContext。
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name> <!-- SpringMVC配置文件 -->
<param-value>/WEB-INF/spring-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup> <!-- Web应用启动时优先加载 -->
</servlet>
2、容器继承关系
在Spring中的ApplicationContext实例是可以有范围(scope)的。
在SpringMVC应用中,每个DispatcherServlet都有一个自己的WebApplicationContext,它又继承了根WebApplicationContext中已经定义的所有bean。因此,在DispatcherServlet的初始化过程中,SpringMVC会根据配置文件创建其中所定义的bean。如果在根上下文中存在相同名字的bean,则它们将被新定义的同名bean覆盖。
3、Web应用中容器实现(了解)
在SpringMVC中,使用WebApplicationContext表示容器上下文。它继承自ApplicationContext,提供了一些Web应用经常需要用到的特性。它与普通的ApplicationContext不同的地方在于,它支持主题的解析,并且知道它关联到的是哪个servlet(它持有一个该ServletContext的引用)。
WebApplicationContext被绑定在ServletContext中。如果需要获取它,你可以通过RequestContextUtils工具类中的静态方法来拿到这个web应用的上下文WebApplicationContext。
4、项目中的容器应用
由于业务层和数据层的Bean是全局共享的,它们配置在Spring的根容器中;表现层的Bean配置在DispatchSevlet的子容器中。由于DispathcServlet的子容器继承了根容器;这样,不同表现层实现可以共享相同的业务层和数据层,而各个表现层的实现之间互不相关。
现在,在根容器的Spring配置文件中,只会配置扫描@Service和@Repository组件:
<context:component-scan base-package="com.hwadee.service,com.hwadee.dao">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Service" />
<context:include-filter type="annotation" expression="org.springframework.stereotype.Repository" />
</context:component-scan>
在DispatchServlet的Spring配置文件中,只会配置扫描@Controller组件:
<context:component-scan base-package="com.hwadee.controller">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>
|
|