一. 自动配置的魔法
@SpringBootApplication 注解由三个复合注解组成, @EnableAutoConfiguration 注解实现了Starter 组件的自动装配
spring.factories 文件包括了 需要的所有配置文件标注了@Configuration注解, @Bean注解bean 的全路径。
二.与自动配置有关的一些注解
@ConditionalOnClass({Servlet.class ,DispatherServlet.class ,WebMvcConfigurerAdapter.class})
这个自动配置生效条件是如果被提到的类在classpath中.
@ConditionalOnMissingBean(WebMvcConfigurationSuppot.class):
这个自动配置生效条件是如果没有显示声明WebMvcConfigurationSuppot bean
@AutoconfigureOrder(Ordered.HIGHEST_PRECEDENCE+10)
这个指明了自动配置类的优先级.
举例 :来看下面代码片段

@ConditionalOnBean(ViewResolver.class) :
注解含义: 如果在classpath 中有 viewRresolver 这个类. 则创建 一个 bean ContentNegotiatingViewResolver
@ConditionalOnMissingBean(name = "viewResolver", value=ContentNegotiationgViewResolver.class):
注解含义:
如果没有显示声明 名字是 viewResolver 和 类型是 ContentNegotiatingViewResolver,则创建这个bean
总结, 所有自动装配的逻辑在 spring boot application 应用开始时执行的. 如果一个指定的类在 classpath中有效, 这些自动装配的类被执行. 自动装配的类查看这些已经配置的哪些bean. 基于这些beans ,它们能创造默认的bean.