当前位置: 移动技术网 > IT编程>开发语言>Java > SpringMVC和Spring的配置文件扫描包详解

SpringMVC和Spring的配置文件扫描包详解

2019年07月19日  | 移动技术网IT编程  | 我要评论

在spring整体框架的核心概念中,容器是核心思想,就是用来管理bean的整个生命周期的,而在一个项目中,容器不一定只有一个,spring中可以包括多个容器,而且容器有上下层关系,目前最常见的一种场景就是在一个项目中引入spring和springmvc这两个框架,那么它其实就是两个容器,spring是父容器,springmvc是其子容器,并且在spring父容器中注册的bean对于springmvc容器中是可见的,而在springmvc容器中注册的bean对于spring父容器中是不可见的,也就是子容器可以看见父容器中的注册的bean,反之就不行。

我们可以使用统一的如下注解配置来对bean进行批量注册,而不需要再给每个bean单独使用xml的方式进行配置。

<context:component-scan base-package="com.springmvc.test" />

(在xml配置了这个标签后,spring可以自动去扫描base-pack下面或者子包下面的java文件,如果扫描到有@component @controller@service等这些注解的类,则把这些类注册为bean)

(另外<context:component-scan>还提供了两个子标签

        <context:include-filter>

       <context:exclude-filter>

在说明这两个子标签前,先说一下<context:component-scan>有一个use-default-filters属性,该属性默认为true,这就意味着会扫描指定包下的全部的标有@component的类,并注册成bean.也就是@component的子注解@service,@reposity等。所以如果仅仅是在配置文件中这么写

<context:component-scan base-package="tv.huan.weisp.web"/>

 use-default-filter此时为true那么会对base-package包或者子包下的所有的进行java类进行扫描,并把匹配的java类注册成bean。

 可以发现这种扫描的粒度有点太大,如果你只想扫描指定包下面的controller,该怎么办?此时子标签<context:incluce-filter>就起到了勇武之地。

如下所示

<context:component-scan base-package="tv.huan.weisp.web .controller"> 
<context:include-filter type="annotation" expression="org.springframework.stereotype.controller"/>  
</context:component-scan> 

如图:

从spring提供的参考手册中我们得知该配置的功能是扫描配置的base-package包下的所有使用了@component注解的类,并且将它们自动注册到容器中,同时也扫描@controller,@service,@respository这三个注解,因为他们是继承自@component。

在项目中我们经常见到还有如下这个配置,其实有了上面的配置,这个是可以省略掉的,因为上面的配置会默认打开以下配置。以下配置会默认声明了@required、@autowired、 @postconstruct、@persistencecontext、@resource、@predestroy等注解。

<context:annotation-config/>(可省略)因为有了<context:component-scan base-package="com.springmvc.test" />配置

另外,还有一个和springmvc相关如下配置,经过验证,这个是springmvc必须要配置的,因为它声明了@requestmapping、@requestbody、@responsebody等。并且,该配置默认加载很多的参数绑定方法,比如json转换解析器等。

<mvc:annotation-driven />

具体场景分析

我们共有spring和springmvc两个容器,它们的配置文件分别为applicationcontext.xml和applicationcontext-mvc.xml。
1.在applicationcontext.xml中配置了<context:component-scan base-package=“com.springmvc" />,负责所有需要注册的bean的扫描和注册工作。

2.在applicationcontext-mvc.xml中配置,负责springmvc相关注解的使用。

3.启动项目我们发现springmvc无法进行跳转,将log的日志打印级别设置为debug进行调试,发现springmvc容器中的请求好像没有映射到具体controller中。

4.在applicationcontext-mvc.xml中配置<context:component-scan base-package=“com.springmvc" />,重启后,验证成功,springmvc跳转有效。

总结

以上所述是小编给大家介绍的springmvc和spring的配置文件扫描包详解,希望对大家有所帮助

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网