自动装配流程
- springboot启动时,自动装配逻辑在@SpringBootApplication这个符合注解中的@EnableAutoConfiguration
- 新版springboot3会扫描META-INF的spring文件夹下的org.springframework.boot,autoconfigure,AutoConfiguration.imports文件,会把这里所有写的自动装配类路径全部拉取到内存
- 初步排除一下不需要自动装配的类,即看下这些类上面是否存在@EnableAutoConfiguration注解,不存在该注解直接被排除,remove出map集合中
- 进一步判断留下的这些自动装配类是否需要加载到IOC, 此时会根据META-INF的spring-autoconfigure-metadata.properties里面的条件进行filter过滤,只会加载符合条件的自动装配类
- 实际上经过filter条件过滤后,大多数类都不会被加载
- 如果是springboot2.7之前的版本,自动装配类扫描路径是在META-INF下的spring.factories文件。
自动装配文件配置的所在位置
-
旧版的自动装配类配置的路径:
在META-INF下的spring.factories文件中,以key-value的形式 -
新版本自动装配类的路径:
在META-INF的spring文件夹下的org.springframework.boot,autoconfigure,AutoConfiguration.imports文件中,这个文件名和路径必须这么写,是固定的。内容是以【包名+类名】的格式,每个自动装配独立占1行,无需加什么分隔符,直接换行写第二个自动装配类即可 -
校验过滤哪些自动装配类的条件:
在META-INF的spring-autoconfigure-metadata.properties中,这里面定义了所有需要自动装配的条件,只有符合的才会自动装配
新版自动装配类的写法org.springframework.boot,autoconfigure,AutoConfiguration.imports截图:
旧版自动装配写法spring.factories截图:
spring-autoconfigure-metadata.properties自动装配条件文件截图: