今天在配置Spring的component-scan时,发现了一个有趣的问题。就是在指定base-package时,如果使用了星号通配符*,有时会出现类扫描不到的情况。下面研究一下这个问题。

先介绍一下项目结构:
为了演示,我在java文件夹下创建名为controller的包,并在该包下创建了一个名为IndexController的类。如图所示:

先来看正常情况:
在Spring配置文件中配置Component-Scan:
<context:component-scan base-package="controller" />
启动项目,访问localhost:8080/index.do,结果正常。

但,当我把component-scan配置成这样时:
<context:component-scan base-package="controller.*" />
出现了404,说明Spring没有扫描到我的Controller,所以无法处理我们的请求。

但,当我把component-scan配置成这样时:
<context:component-scan base-package="controller.**" />
又一切正常了。

这是为啥呢,我们打个断点看一下:
当base-package="controller"时,可见packageSearchPath为"classpath*:controller/**/*.class":

当base-package="controller.*"时,可见packageSearchPath为"classpath*:controller/*/**/*.class":

当base-package="controller.**"时,可见packageSearchPath为"classpath*:controller/**/**/*.class":

综上, 可以分析出,**匹配任意class文件和包,而*只能匹配包,因此无法扫描到包下的类,因此也就无法被Spring管理。

最新文章

  1. SQL必知必会1-13 读书笔记
  2. Go - 变量初始化 及 注意事项
  3. Ubuntu之root权限的获取
  4. PSP记录个人项目耗时
  5. 阿里云CentOS配置全过程
  6. android 源码编译中的错误 解决
  7. configure脚本参数介绍
  8. poj 3225 间隙(横截面和填充操作)
  9. 简单介绍nandflash、norflash、ram、sram、dram、rom、eeprom、flash的差别
  10. 重温《STL源码剖析》笔记 第三章
  11. Spring Boot配置拦截器及实现跨域访问
  12. [Git]2018-10 解决git cmd中文乱码问题
  13. 3 Redis 的常用五大数据类型
  14. Spring Boot @EnableWebMvc 与 mvc 配置
  15. 如何实现从Java入门到服务端项目开发的进阶?
  16. JavaGC学习笔记
  17. 中间人攻击(MITM)之数据截获原理
  18. ASP.NET CORE下运行CMD命令
  19. apache服务器的常用功能及设置
  20. Matlab基础部分2-数组和矩阵分析

热门文章

  1. 洛谷 P3371 【模板】单源最短路径(弱化版) 题解
  2. 第03组 Alpha冲刺(1/4)
  3. CSS — BEM 命名规范
  4. 浮动,HTML大知识
  5. SQL优化-如何分析性能瓶颈
  6. SpringMVC @SessionAttribute 使用说明
  7. (转)matplotlib实战
  8. redis连接池——JedisPool和JedisCluster的介绍与使用
  9. git 如何同步本地tag与远程tag
  10. 【JS】AJAX跨域-JSONP解决方案(一)