关于component-scan中base-package包含通配符的问题探究

关于component-scan中base-package包含通配符的问题探究今天在配置Spring的component-scan时,发现了一个有趣的问题。就是在指定base-package时,如果使用了星号通配符*,有时会出现类扫描不到的情况。下面研究一下这个问题。先介绍一下项目结构: 为了演示,我在java文件夹下创建名为controller的包,并在该包下创建了一个名为IndexController的类。如图所示: 先来看正常情况: 在Spring配置…

大家好,又见面了,我是你们的朋友全栈君。

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

先介绍一下项目结构: 
为了演示,我在java文件夹下创建名为controller的包,并在该包下创建了一个名为IndexController的类。如图所示: 
关于component-scan中base-package包含通配符的问题探究

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

关于component-scan中base-package包含通配符的问题探究
但,当我把component-scan配置成这样时: 
<context:component-scan base-package=”controller.*” /> 
出现了404,说明Spring没有扫描到我的Controller,所以无法处理我们的请求。 

关于component-scan中base-package包含通配符的问题探究
但,当我把component-scan配置成这样时: 
<context:component-scan base-package=”controller.**” /> 
又一切正常了。

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

关于component-scan中base-package包含通配符的问题探究
base-package=”controller.*“时,可见packageSearchPath为”classpath*:controller/*/**/*.class”: 

关于component-scan中base-package包含通配符的问题探究
base-package=”controller.**“时,可见packageSearchPath为”classpath*:controller/**/**/*.class“: 

关于component-scan中base-package包含通配符的问题探究
综上, 可以分析出,**匹配任意class文件和包,而*只能匹配包,因此无法扫描到包下的类,因此也就无法被Spring管理。
——————— 
作者:陈夏明 
原文地址:https://blog.csdn.net/u012325167/article/details/75388990 
 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/147219.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号