1、Spring和SpringMVC是父子容器关系。
1、简介
springmvc就是管理controller对象的容器,spring就是管理service和dao的容器,这下你明白了吧。所以我们在springmvc的配置文件里配置的扫描路径就是controller的路径,而spring的配置文件里自然配的就是service和dao的路径
其次, spring容器和springmvc容器的关系是父子容器的关系。spring容器是父容器,springmvc是子容器。在子容器里可以访问父容器里的对象,但是在父容器里不可以访问子容器的对象,说的通俗点就是,在controller里可以访问service对象,但是在service里不可以访问controller对象
所以这么看的话,所有的bean,都是被spring或者springmvc容器管理的,他们可以直接注入。然后springMVC的拦截器也是springmvc容器管理的,所以在springmvc的拦截器里,可以直接注入bean对象。
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/employee/**" ></mvc:mapping>
<bean class="com.smart.core.shiro.LoginInterceptor" ></bean>
</mvc:interceptor>
</mvc:interceptors>
SpringMVC是一个MVC模式的WEB开发框架;它是Spring的一个模块,通过Dispatcher Servlet, ModelAndView 和 View Resolver,让应用开发变得很容易
Spring MVC和Spring Boot都属于Spring,Spring MVC 是基于Spring的一个 MVC 框架,而Spring Boot 是基于Spring的一套快速开发整合包
spring-webmvc是Spring MVC的一个实现。spring-webmvc依赖spring- web,因此包括它会传递性增加spring-web。您不必spring-web显式添加。
如果您不使用Spring MVC,但想利用Spring支持的其他与Web相关的技术,则应该仅依赖spring-web。
2、按照官方文档推荐
根据不同的业务模块来划分不同的容器中注册不同的Bean,SpringMVC主要就是为我们构建web应用程序,那么**SpringMVC子容器用来注册web组件的Bean,如控制器、处理器映射、视图解析器等。**而Spring用来注册其他Bean,这些Bean通常是驱动应用后端的中间层和数据层组件。
3、Spring和SpringMVC容器冲突的原因?
SpringMVC容器是Spring容器的一个子容器,它同样能够初始化实体类。由于SpringMVC容器的初始化是在Spring容器初始化之后,所以它会替换Spring中已经存在的类,这样可能会导致冲突。因此在Spring的配置文件中SpringMVC和Spring容器各司其职,在使用ComponentScan进行扫描时,各自扫描各自的实体类。如下配置:
**spring容器扫描配置:**排除Controller
<context:component-scan base-package="com.projects.system">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"