SpringBoot的默认组件扫描

本篇博客主要探究:为什么SpringBoot项目中我们没有配置组件扫描的包,为什么它会默认扫描启动类所在的包?

一、访问与启动类所在同一包下的接口 

我们先来看一个简单的接口:

SpringBoot的默认组件扫描_第1张图片

我们可以观察到,HelloController这个类处在启动类所在包下:

SpringBoot的默认组件扫描_第2张图片

这时,我们启动项目,可以观察到,即使没有配置组件扫描的包,这个sayHi方法是可以被正常访问的:

二、访问与启动类不在同一包下的接口(不作任何其他操作 , 失败)

将其放入review包下,则访问出错: 

SpringBoot的默认组件扫描_第3张图片

运行结果: 

SpringBoot的默认组件扫描_第4张图片

2.1 在启动类添加 @ComponentScan注解

但是如果在启动类中添加@ComponentScan注解,并在其指定需要扫描的路径,即可解决上述问题:

SpringBoot的默认组件扫描_第5张图片

可以看到,访问成功。

同理,当我们书写测试方法的时候也要如此:将测试方法放在启动类的包下。

SpringBoot的默认组件扫描_第6张图片

总结:

以上情况反应了 Spring Boot 项目的一个特点:约定大于配置。 

Spring Boot使用自动配置来根据应用的依赖和类路径上的内容来自动配置应用。它会尝试猜测你的意图并配置相应的bean。这样,你只需要专注于那些与默认配置不同的部分,而不必手动配置每个细节。

你可能感兴趣的:(spring,boot,spring,java)