1、Spring Boot 的启动类启动时,默认扫描其所在的根目录及其子目录。
所以:所以注入的bean,放在 启动类所在的目录或者启动类所在目录的子目录,最为适宜。
2、如果,注入的bean不在启动类所在的目录或者其子目录下的话,默认扫描是找不到的,
这时候,就需要在启动类上添加扫描的目录。
注意:添加扫描的目录时:添加了什么目录,启动类启动时就扫描这个目录及其子目录,
所以,添加扫描bean的目录时,一定要添加,启动类所在的目录(否则,启动类所在的
目录及其子目录是不会被扫描的;当然,如果启动类所在的目录及其子目录 没有要用到
的东西--<基本没这种情况>,可以不添加。所以还是加上,以免出现未知异常,就头疼了。)
即:需要扫描哪里,就添加对于的扫描目录(灵光一闪)。
3、举例说明:
A:先举例说明第二中情况:
两个module:
I:springboot-web
//启动类WebApplication.java 所在的目录为:com.cp.springboot.web
//MsgController所在目录为:com.cp.springboot.web.controller
II:springboot-domain
//MsgBean 所在目录为:com.cp.springboot.domain.bean
此时:要想正确调用注入的MsgBean,启动类应该添加扫描目录:
@ComponentScan(basePackages = {"com.cp.springboot.web","com.cp.springboot.domain.bean"})
启动类代码如下:
@SpringBootApplication @ComponentScan(basePackages = {"com.cp.springboot.web","com.cp.springboot.domain.bean"}) public class WebApplication { public static void main(String[] args) { SpringApplication.run(WebApplication.class, args); } }
B:举例说明第一种情况:注入bean后,不需要进行其他改动
两个module:
I:springboot-web
//启动类WebApplication.java 所在的目录为:com.cp.springboot.web
//MsgController所在目录为:com.cp.springboot.web.controller
II:springboot-domain
//MsgBean 所在目录为:com.cp.springboot.web.bean
此时:MsgBean所在的bean目录是:com.cp.springboot.web目录(启动类所在的目录)的子目录,
所以,启动类启动时,也会自动扫描bean目录,就不需要再添加扫描目录了。(这样简单明了,并且以后打包放进spring-web中的时候,出现问题的概率不大。此处纯属个人见解,哈哈,仁者见仁,智者见智。
当然,很多大侠们还有更风骚的处理方式,我也在寻找。
)