有的单元测试为了提高执行效率,会关闭 web 环境,这样能节省一点初始化时间:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE) // 关闭 web 环境
public class CoreClassTest {
    // ...
}

这个时候 ApplicationContext 中是没有 ServletContext 的,这会导致 WebAutoConfiguration 执行失败。所以 WebAutoConfiguration 需要加上 @ConditionalOnBean 注解,当检查到没有初始化 web 环境时,跳过相应的自动配置。同时这里也要注意,不要将与 WebMVC 无关的自动配置加到这个类里面来,以免该做的配置没有执行。