spring boot 自动装配

146 阅读1分钟

摘要

记录下在看spring boot 源码时,如何spring是如何实现yml自动装配。

入口

在spring boot启动类中的@SpringBootApplication就是实现自动装配的线索,通过代码可以发现@EnableAutoConfiguration就是实现自动装配的核心所在。 EnableAutoConfiguration类中找到EnableAutoConfigurationImportSelector 直接继续跟着代码寻找,selectImports方法中getCandidateConfigurations获取自动装配类的方法 接下来就是通过类加载器寻找META-INF/spring.factories文件 在spring-boot-autoconfigure包中META-INF/spring.factories自动装配类的配置 以我们常用的redis为例,看下spring是如何完成自动装配的。

Conditional家族

  • @ConditionalOnProperty:如果有指定的配置,条件生效;
  • @ConditionalOnBean:如果有指定的Bean,条件生效;
  • @ConditionalOnClass:当类路径下有指定的类,条件生效;
  • @ConditionalOnMissingBean:如果没有指定的Bean,条件生效;
  • @ConditionalOnMissingClass:如果没有指定的Class,条件生效;
  • @ConditionalOnWebApplication:在Web环境中条件生效;
  • @ConditionalOnExpression:根据表达式判断条件是否生效。 所以只有在pom.xml文件中添加spring-boot-starter-data-redis,redis的自动配置才生效的,我们就能看到常规配置注入了。

EnableConfigurationProperties

进入@EnableConfigurationProperties 中配置的RedisProperties.class

总结

Spring Boot通过@EnableAutoConfiguration注解找到项目jar包下的META-INF/spring.factories配置文件中的所有自动配置类,根据条件对其进行加载,通过@ConfigurationProperties注解,从配置文件中读取配置信息,并对其进去注入,完成装配。