说起spring容器和SpringMVC容器,很多刚接触spring框架的同志都有点懵,甚至是一头雾水,分不清楚两者的关系和区别,包括本人也是,因此还在网上找个不少资料。这俩容器呢虽然有必然的联系,但是他们的区别也是有的。下面我就简单描述下。
首先 springmvc和spring它俩都是容器,容器就是管理对象的地方,例如Tomcat,就是管理servlet对象的,而springMVC容器和spring容器,就是管理bean对象的地方,再说的直白点,springmvc就是管理controller对象的容器,spring就是管理service和dao的容器,这下你明白了吧。所以我们在springmvc的配置文件里配置的扫描路径就是controller的路径,而spring的配置文件里自然配的就是service和dao的路径
SpringMVC.xml文件所配置的路径:
<context:component-scan base-package="com.jd.controller"/>
applicationContext-service.xml文件所配置的路径:
<!--开启注解扫描 扫描dao层和service层-->
<context:component-scan base-package="com.gx.dao,com.jd.service">
<context:include-filter expression="org.springframework.stereotype.Service" type="annotation"/>
<context:include-filter expression="org.springframework.stereotype.Repository" type="annotation"/>
</context:component-scan>
其次, spring容器和springmvc容器的关系是父子容器的关系。spring容器是父容器,springmvc是子容器。在子容器里可以访问父容器里的对象,但是在父容器里不可以访问子容器的对象,说的通俗点就是,在controller里可以访问service对象,但是在service里不可以访问controller对象
所以这么看的话,所有的bean,都是被spring或者springmvc容器管理的,他们可以直接注入。然后springMVC的拦截器也是springmvc容器管理的,所以在springmvc的拦截器里,可以直接注入bean对象。
<!--SpringMVC 拦截器配置(可以多个)-->
<mvc:interceptors>
<!--配置拦截器-->
<mvc:interceptor>
<!--配置拦截的资源-->
<mvc:mapping path="/**"/>
<!--配置拦截器bean对象-->
<bean class="com.jd.interceptor.MyInterceptor1"/>
</mvc:interceptor>
</mvc:interceptors>