本篇博客主要探究:为什么SpringBoot项目中我们没有配置组件扫描的包,为什么它会默认扫描启动类所在的包?
一、访问与启动类所在同一包下的接口
我们先来看一个简单的接口:
我们可以观察到,HelloController这个类处在启动类所在包下:
这时,我们启动项目,可以观察到,即使没有配置组件扫描的包,这个sayHi方法是可以被正常访问的:
二、访问与启动类不在同一包下的接口(不作任何其他操作 , 失败)
将其放入review包下,则访问出错:
运行结果:
2.1 在启动类添加 @ComponentScan注解
但是如果在启动类中添加@ComponentScan注解,并在其指定需要扫描的路径,即可解决上述问题:
可以看到,访问成功。
同理,当我们书写测试方法的时候也要如此:将测试方法放在启动类的包下。
总结:
以上情况反应了 Spring Boot 项目的一个特点:约定大于配置。
Spring Boot使用自动配置来根据应用的依赖和类路径上的内容来自动配置应用。它会尝试猜测你的意图并配置相应的bean。这样,你只需要专注于那些与默认配置不同的部分,而不必手动配置每个细节。