SpringBoot 的 SpringBootApplication 注解
写在前面
SpringBoot 由于其约定优于配置的设计理念,在众多互联网公司应用广泛。SpringBoot 使得程序员在业务开发过程中不用关心 Spring 原有的复杂配置,直接写一个 @SpringBootApplication 注解,程序就可以直接运行。但是,这些默认配置都是 SpringBoot 内部约定的,并不是适合所有的应用场景。所以,要想用好 SpringBoot 还是得熟练掌握内部原理。
SpringBootApplication 注解剖析
SpringBootApplication 注解标明此为 SpringBoot 项目的启动类,主程序。应用使用该注解后,SpringBoot 应用直接使用 SpringBoot 默认的配置启动应用。该注解是如何实现的呢?
该注解由三个注解组成,分别是 @SpringBootConfiguration + @EnableAutoConfiguration + @ComponentScan
@SpringBootConfiguration 实际上就是 @Configuration 的封装,表示该类是配置类。
@EnableAutoConfiguration 是 @AutoConfigurationPackage 和 @Import 的组合,表示开启自动配置功能。
@AutoConfigurationPackage 功能也是由 @Import 实现的,作用就是将主程序类所在的包及其所有子包下的组件都扫描到 SpringIOC 容器中。
@Import({AutoConfigurationImportSelector.class}) 将 AutoConfigurationImportSelector 这个类导入到 Spring 容器中,这个类可以帮助 SpringBoot 应用将所有符合条件的 @Configuration 配置都加载到当前 Spring 的 IOC 容器内。从 classpath 中搜寻 META-INF/spring.factories 配置间,并将对应的配置项中的类以反射形式实例化成 JavaConfig 配置类,加载到 IOC 容器中。
@ComponentScan 表示扫描类注册为 Spring Bean。
由于 @ComponentScan 的 basePackage 为空,表示扫描当前包及其所有子包下的类注册为 Spring Bean。所以 SpringBoot 的启动类一般置于项目的最外层,而不是某个包下。
版权声明: 本文为 InfoQ 作者【技术小生】的原创文章。
原文链接:【http://xie.infoq.cn/article/9d435d568ced88893fc4c47f5】。文章转载请联系作者。
评论