文章目录
1 @SpringBootApplication 注解的应用
- 一般情况我们使用 @SpringBootApplication 注解来启动 SpringBoot 项目
- 它其实只相当于 @Configuration、@EnableAutoConfiguration、@ComponentScan(包含了两个filter)
@SpringBootApplication
public class FrameworkUnitRealTestApp {
public static void main(String[] args) {
SpringApplication.run(FrameworkUnitRealTestApp.class, args);
}
}
2 @SpringBootTest 注解的应用
- 一般情况我们使用 @SpringBootTest 和 @RunWith(SpringRunner.class) 注解来启动 SpringBoot 测试项目
@RunWith(SpringRunner.class)
@SpringBootTest
public class FrameworkUnitRealTestApp {
@Test
public void test() {
}
}
3 @SpringBootApplication 和 @SpringBootTest 的区别
-
这两个注解的区别的核心在于两个注解:@EnableAutoConfiguration、@ComponentScan(包含了两个filter)
-
@EnableAutoConfiguration 启动了所有的自动配置类
-
@ComponentScan(包含了两个filter):在扫描阶段过滤掉 @TestComponent 等专属于测试的类和过滤掉被 @Configuration 注解的自动配置类(使得自动配置类不会在扫描阶段就被注册 beanDefinition,因为 自动配置类的优先级应该是最低的)
-
可以看出 @SpringBootTest 并没有启用任何自动配置类,所以就不需要加 AutoConfigurationExcludeFilter 了
-
springboot 通过引入 @Test** 注解来在 测试环境下 引入不同的自动配置类!
4 @ComponentScan(包含了两个filter) 解析
- 详细的代码如下:添加了 TypeExcludeFilter 和 AutoConfigurationExcludeFi