@SpringBootApplication 注解为 springboot 的主启动类上面的一个注解 , 是一个组合注解
@ SpringBootConfiguration
@ EnableAutoConfiguration
@ ComponentScan
@ SpringBootConfiguration
在上下文中声明Bean的定义 , 类似于 xml 配置文件 , 相当于 xml 方式的一种演变
@SpringBootConfiguration 和 @Configuration 注解功能相同 , SpringBootConfiguration 是专门为 SpringBoot 准备的注解
@Configuration 和它的好伙伴 @Bean 搭配使用
@Configuration 相当于把该类作为 spring 的 xml 版的容器 。@Configuration 注解的类中,使用 @Bean 注解标注的方法,会返回一个对象作为 spring 上下文中的 bean
标识一个可以被组件扫描器扫描的配置类
@ EnableAutoConfiguration
开启自动装配功能 , 为 @ComponentScan 找到主启动类的路径 , 配合主启动类上的@SpringBootConfiguration 注解 ( @SpringBootApplication 子注解 ) , 最终将 标识 @ComponentScan ( 组合注解 --- @Service @Repository @Controller ) 注解的类 自动装配到 ioc 容器中来管理
@ ComponentScan
开启组件扫描 , 带有指定注解的类 ( 比如 : 标识 @Component 注解的类 ) , 装配到 bean中 , 放入 ioc 容器中进行管理
@Component 下的子注解 : @Service @Repository @Controller
@ComponentScan 注解扫描的包路径由主启动类所在包位置决定
@ComponentScan 进行扫描时 , 配合 @EnableAutoConfiguration , 找到 Spring Boot 项目主程序启动类所在包的具体位置。找到之后会自动扫描当前启动类所在包下及其子包下的所有内容 ( 包下所有标识 @Componet 的类 ) , 并注册成 bean 对象
上面就说明了 : 为什么一个 @SpringBootApplication 注解 , 就可以扫描该启动类所在包下的所有标识 @Component 注解的类了
@ComponentScan 相当于 xml 配置中的 < context : component - scan base -package = " com.xxx.xxx " >