SpringBoot快速入门-SpringBoot包的默认扫描规则

以前的Spring项目,Bean要么是xml中配置,要么是手动指定一组要扫描的路径,来加载项目中的Bean。
SpringBoot项目默认有对应的扫描Bean的路径,扫描规则是:主程序所在的包及其子包都会进行扫描并加载,不需要手动指定扫描的包路径。
主程序就是我们启动SpringBoot项目的那个类,这个类中有一个main函数,代码一般结构如下:

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);

    }

}

如果要自定义扫描路径,也就是代码没有写在主程序所在的包及其子包下,那么就可以通过@SpringBootApplication(scanBasePackages = “com.itzhimei”)或@ComponentScan(“com.itzhimei”)来进行指定扫描路径。

按照我现在的项目路径为:

com
  |--itzhimei
    |--App.java
    |--handle
      |--SpringBootConfiguration_1
  |--itzhimei2
    |--App2.java

我项目的主程序是com.itzhimei.App,项目默认是不会扫描itzhimei2包下的bean的,此时我们在App2中的代码如下:

@RestController
public class App2
{

    @GetMapping("/hello2")
    public String hello(@RequestParam(value = "name", defaultValue = "World") String name) {
        return String.format("Hello2 %s!", name);
    }

}	

启动项目,访问这个Controller:http://localhost:8081/sbc/hello2?name=张三
提示:Whitelabel Error Page,也就是没有找到这个方法

启动类上修改包的扫描路径为@SpringBootApplication(scanBasePackages = “com”),这里注意,我们将扫描的路径提升了一级,com包下包含itzhimei和itzhimei2。
再次访问这个Controller:http://localhost:8081/sbc/hello2?name=张三
输出结果:Hello2 张三!