1、Springboot配置文件,加载顺序和加载文件位置。
file代表项目根目录
使用精髓
注解:
@SpringbootApplication:这个注解标注到某个类上表明这个类是Springboot的主配置类,是Springboot应用的主程序类和主入口,是一个组合注解。
在Spring Boot 启动时会加载主配置类,开启了自动配置功能
在自动配置中发挥作用的时@EnableAutoConfiguration,在这个注解里有@Import注解(Spring底层注解,给容器中导入组件),在@Import注解中添加了个属性 AutoConfigurationImportSelector.class ——自动配置导入选择器。
在选择器中的selectImports方法可以看到,,会将类路径下的META-INF/spring.factories里面配置的所有EnableAutoConfiguration的值导入到容器中。
在配置文件中可以看出,Spring Boot 已经为我们提供了很多组件,大部分开发所需的都有涉及到。每个这种
xxxAutoConfiguration都是一个组件,用他们来进行自动配置。
以HttpEncodingAutoConfiguration为例
@Configuration //表示这是一个配置类,作用就和以前的配置文件一样,也可以往容器中添加组件
@EnableConfigurationProperties({HttpEncodingProperties.class})
//Spring底层@Conditional注解(Spring注解版),根据不同的条件,如果满足指定的条件,整个配置才会生效:这个是判断当前应用是否web应用,如果是,当前配置类生效
@ConditionalOnWebApplication(
type = Type.SERVLET
)
//可以看出CharacterEncodingFilter这是SpringMVC中的编码过滤器:这个是判断应用中是否含有此过滤器
@ConditionalOnClass({CharacterEncodingFilter.class})
//判断配置文件中是否存在某个配置:spring.http.encoding;如果不存在,判断也是成立的,因为在matchIfMissing属性中配置了true
@ConditionalOnProperty(
prefix = "spring.http.encoding",
value = {"enabled"},
matchIfMissing = true
)
@EnableConfigurationProperties
启动指定类的ConfigurationProperties功能,括号中有配置类属性,点进去可以发现,此类中有个
@ConfigurationProperties注解(详解看@ConfigurationProperties作用,@补充(后补充到@ConfigurationProperties详解模块中):所有在配置文件中能配置的信息都在xxxProperties类中封装着,在配置文件中能配置什么取决于配置类中的属性,否则配上也没用),从配置文件获取值绑定到类中。
如果判断都成立了,配置都生效了, @Bean即向容器中添加一个组件
@SpringBootConfiguration:表明该类是Springboot的配置类 ,也是个组合注解。配置类也是容器中的一个组件。
2、为什么在主启动类mian()方法中需要传入本类的class呢
这样对比之下就会发现,其实Springboot与Spring的启动方式其实没有区别,只不过Spring 指定xml配置文件的位置,而Spring boot则是指定配置类,而这里的配置类就是主启动类本身了,因为@SpringBootApplication中有@SpringBootConfiguration注解所以本身被@SpringBootApplication的主启动类也是一个配置类
3、Springboot自动配置的原理
在自动配置过程中起关键作用的就是@import中引入的AutoConfigurationImportSelector 自动配置导入选择器
Springboot 自动配置流程最后配置的出来东西其实是配置文件中的这些配置类的bean定义,存到了bean定义map中BeanDefitionMap,后续就给Spring实例化bean流程进行处理