spring容器和springMVC框架扫描包的两种方式

我们知道,springMVC框架是spring容器的一个子容器,因此在某些方面它们可以达到一个共同的效果,接下来我们来介绍一下在spring容器和springMVC扫描包的两种方式。
1、将扫描器全部配置于springMVC中


<mvc:annotation-driven>mvc:annotation-driven>

<context:component-scan base-package="com.yzh.maven.*" />

说明:由于springMVC时spring的一个子容器,其特点是可以使用父容器的实例,因此我们可以将扫描器全部配置于springMVC中,但是这种扫描有可能会导致事务失去效果,因为spring和springMVC时明确分工的,一个可以接管事务和数据源以及其他bean的维护以及bean之间关系的维护;另一个则是管理web层的框架,用于处理视图解析、拦截器等相关操作,主要用于对controller层的操作。
注意:如果springMVC扫描不到controller层,那么客户端发来的*.action请求也会报告404的错误!另外,不能将扫描器全部配置于spring中,因为父容器不能访问子容器springMVC的实例(controller实例,这个实例需要由springMVC解析)。

2、springMVC管理controller层,spring管理除controller之外的所有层
(1)在spring容器中配置除controller之外的所有层的扫描器

<context:component-scan base-package="com.yzh.maven.*">
    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
context:component-scan>

(2)在springMVC中配置controller层的扫描器

<context:component-scan base-package="com.yzh.maven.controller" use-default-filters="false">
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    <context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
context:component-scan>

说明:由于框架本身的特点,springMVC管理controller层,spring管理除controller之外的所有层,官方更推荐使用第二种扫描方式。

你可能感兴趣的:(spring,springmvc,mybatis)