SpringBoot自动配置和自定义配置
@Import注解
对于下面的例子来说,MyConfig和OtherConfig里面有名字相同的Bean,运行的时候以MyConfig为主,因为Import注解会先解析OtherConfig配置类,然后再去解析MyConfig配置类,后面的解析会覆盖前面的解析。
实现DeferredImportSelector类
OtherConfig后执行,并且在OtherConfig里面有@ConditionOnMissingBean注解,因为先解析了MyConfig类里面的myBean,所以在解析OtherConfig的时候就不会覆盖。
SpringBoot相关源码
AutoConfiguration接口里面引入了AutoConfigurationImportSelector,先解析自定义的配置类,然后再去解析SpringBoot中的自动配置类,只有对应的Bean不存在的时候才会去解析SpringBoot里面的自动配置类
SpringBoot按需加载
SpringBoot中几乎对所有的功能都有自动配置类,包括数据库、SpringMVC等,在启动的时候并不是会把所有的配置全部进行加载,只会加载需要的自动配置。比如下面的代码@ConditionalOnClass注解,只有在pom.xml中引入了对应的依赖,才会加载对应的自动配置类,也就是会按需加载
SpringBoot扩展点
和Spring类似,SpringBoot可以在原来框架的基础上进行二次开发。比如:如果想要自定义类型转换器,在配置类里面添加Convertor并且实现convert方法