石家庄网站建设哪家专业,男生和女生做污的事情免费网站,wordpress收费下载插件,百度竞价排名什么意思目录标题一、误解二、正确的理解三、不同包也能扫描到Bean的方法一、误解
一开始我一直以为spring boot默认的包扫描范围是启动类的同级目录和子目录下的Bean。其实正真是与启动类在同个包以及子包下的Bean。 我一直误解了包的概念#xff0c;包并不是只文件夹#xff08;文…
目录标题一、误解二、正确的理解三、不同包也能扫描到Bean的方法一、误解
一开始我一直以为spring boot默认的包扫描范围是启动类的同级目录和子目录下的Bean。其实正真是与启动类在同个包以及子包下的Bean。 我一直误解了包的概念包并不是只文件夹文件路径。 只扫描这个文件夹下的所有类。
上面的理解是完全错误的也就是你误解了java中包的概念包不等于文件夹。。。
二、正确的理解
在同一个项目中一般会有很多模块。如下
mian模块中有spring boot的启动类。如果想要让main模块扫描到并使用commom模块中的Bean应该做
我们已经知道spring boot的默认包扫描规则是启动类在同个包以及子包下的Bean。因此我们只需要将main模块的包命名用在commom模块中并保持在同包或子包下即可。如下
在main和commom两个模块中main 的包名为com.lihua commom 的包名为com.lihua.test。符合同包或者子包的规则。因此commom下的bean能直接被扫描到。
例子
启动类所在包其他模块的Bean所在包能否扫描到Beancom.lihuacom.lihua.test能com.lihuacom.lihua1.test不能
三、不同包也能扫描到Bean的方法
在启动类添加包扫描。ComponentScan(value {com.lihua1.**,com.lihua.**}) 注意手动配置后默认的就失效了所以要加上原来的包路径本包路径。通过配置META-INF/spring.factories文件。spring boot2.7以前通过配置/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件 。spring boot2.7以后
一般来说包路径等于项目、公司的域名的逆写。比如项目域名lihua.com 包路径就为com.lihua 。因此导入的三方maven依赖spring boot 提供的starter自己的starter三方的starter时starter中的Bean如何扫描呢总不能一个个在ComponentScan注解加上吧。因此spring boot 通过使用上面 23的方式实现包扫描。