springboot自动装配的实现原理:
我理解的自动装配是:其实EnableAutoConfiguration上有个Import注解,这个注解里面包含了一个实现了ImportSelector的类,在它里面的selectImports方法可以选择注入需要的Bean,
分析源码可以看到,
第一步:扫描META-INF/spring-autoconfigure-metadata.properties文件,它里面定义了很多的Conditional条件,例如ConditionalOnClass
第二步:扫描META-INF/spring.factories,结合前面扫描到的进行过滤,原因是很多@Configuration其实是依托于其它的框架来加载的,如果当前classpath下没有相关的依赖,则意味着这些类没必要加载,所以通过这种条件过滤可以有效的减少@Configuration类的数量从而降低启动时间。
Spring Boot启动的时候会通过@EnableAutoConfiguration注解找到META-INF/spring.factories配置文件中的所有自动配置类,并对其进行加载,而这些自动配置类都是以AutoConfiguration结尾来命名的,它实际上就是一个JavaConfig形式的Spring容器配置类,它能通过以Properties结尾命名的类中取得在全局配置文件中配置的属性如:server.port,而XxxxProperties类是通过@ConfigurationProperties注解与全局配置文件中对应的属性进行绑定的。