SpringBoot提倡的微服务理念,已深入人心,现在也基本是很多公司的首先开发框架了。她是由Pivotal团队在Spring基础上提供的全新框架,还是秉承着Spring一贯的理念:习惯优于配置。相信使用过SpringBoot的人对@SpringBootApplication注解都不陌生吧,她是启动类上面的一个最最核心的注解,今天我们就来分析下这个注解。
一、三个注解的组合
@SpringBootApplication是启动类上的最重要的一个注解,我们点进去可以看到,她其实是三个注解的组合,也就是说使用者一个注解的作用相当于三个注解。
这三个注解分别是,
- @SpringBootConfiguration
- @ComponentScan
- @EnableAutoConfiguration
二、@SpringBootConfiguration
@SpringBootConfiguration 其实就是对原 @Configuration 注解的简单封装。
@Configuration是Spring 3.0时添加的一个注解,用来代替 applicationContext.xml 配置文件,所有这个配置文件里面能做到的事情都可以通过这个注解所在类来进行注册。
@Configuration还有下面几个相关的注解,也可很重要。
1、@Bean
用来代替 XML 配置文件里面的bean配置。
2、@ImportResource
如果有些通过类的注册方式配置不了的,可以通过这个注解引入额外的 XML 配置文件,有些老的配置文件无法通过 @Configuration 方式配置的非常管用。
3、@Import
用来引入额外的一个或者多个 @Configuration 修饰的配置文件类。
三、@ComponentScan
@ComponentScan主要用来开启组件扫描,可以自动扫描指定包路径下的@Component注解类并将bean实例注册到context中。
@ComponentScan是Spring 3.1时添加的一个注解,用来代替配置文件中的 component-scan 配置,并且可重复注解,即可以配置多个,用来配置注册不同的子包。
四、@EnableAutoConfiguration
@EnableAutoConfiguration主要用来提供自动装配,是这三个注解中最重要的一个注解。她是Spring Boot新添加的注解,提供了强大的自动依赖功能,是SpringBoot这么方便的大功臣。
自动装配原理
@EnableAutoConfiguration注解的关键在于引入了AutoConfigurationImportSelector,其核心逻辑为selectImports方法,逻辑大致如下:
- 从配置文件META-INF/spring.factories加载所有可能用到的自动配置类;
- 去重,并将exclude和excludeName属性携带的类排除;
- 过滤,将满足条件(@Conditional)的自动配置类返回。
好了,本节我们了解了@SpringBootApplication这个核心注解,你都清楚了吗。