以前的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 张三!