新人007 发表于 2016-12-15 11:21

SpringMVC应用中的容器

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>       

页: [1]
查看完整版本: SpringMVC应用中的容器