最近看在spring-boot源码时,对spring-boot的自动配置原理有了个大概的了解,这里说说我个人的
理解。
spring-boot自动配置:自动将第三方框架集成到spring-boot项目中
首先从源码看起,Application配置类上的@SpringBootApplication注解进去可看到
去除元注解还剩下三个自定义注解;
分别讲下它们的大致作用
@SpringBootConfiguration 主要定义了该类为配置类
@EnableAutoConfiguration 用于开启自动配置
@ComponentScan 用于扫包,配置只能扫描与本类的在同一层级下的包,过滤器也可配置不扫描的包。
开启自动配置功能后,spring-boot会自动去依赖的jar包中递归查找是否有META-INF,且该文件夹下是否有spring.factories配置文件如下
该文件中主要用于配置自动装配的配置类扫描
用于自动装配的配置类上应至少添加@Configuration确定其实配置类,有需要单独配置的数据,例
如数据源的url等,则需要添加@EnableConfigurationProperties({xx.class}),配置类中需要注入该
properties类,properties类主要用于存储外化配置数据,
@EnableConfigurationProperties({xx.class})注释通过反射获取到properties类中配置的值。
properties类上需要添加@ConfigurationProperties(prefix = "xxxx"),该注释用于设置在spirng-boot
中的别名,属性为外化配置的key,需要提供getter,setter方法。
在spring-boot中通过配置appliaction.properties或者application.yml,spring-boot则可以读取到
外化配置。
整理下整体的自动配置流程:
spring-boot配置类加上@EnableAutoConfiguration后,会开启自动配置。然后spring-boot会去扫
描当前项目所依赖的架包下是否有META-INF文件夹,META-INF文件夹下是否有spring.factories配
置文件,然后读取spring.factories里配置的自动配置类对其进行自动装配,如果该配置类有
@EnableConfigurationProperties({xx.class})注解,则会根据外化配置类properties去
appliaction.properties或者application.yml中匹配对应的key和value,从而完成自动装配。
小生才疏学浅,有表达或者理解不到位的地方,还请大佬们指出,万分感谢。