`

springboot 多模块注入bean ,访问不到

阅读更多

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中的时候,出现问题的概率不大。此处纯属个人见解,哈哈,仁者见仁,智者见智。

当然,很多大侠们还有更风骚的处理方式,我也在寻找。

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics