Spring Boot自动装配的核心原理是通过条件注解和配置文件实现依赖的自动配置与注入,具体分为以下几个关键步骤:
1. 启动触发机制
- Spring Boot应用启动时,@SpringBootApplication注解(组合了@EnableAutoConfiguration)触发自动装配流程。
- @EnableAutoConfiguration通过@Import(EnableAutoConfigurationImportSelector.class)加载META-INF/spring.factories中的配置类列表(约120+个默认配置类)。
2. 配置类加载与筛选
- 配置来源:从spring-boot-autoconfigure.jar的spring.factories文件中读取全限定名(如RedisAutoConfiguration)。
- 条件过滤:通过@ConditionalOnClass等注解检查类路径是否存在指定类(如JedisConnection.class),仅当依赖存在时配置类生效。
3. 依赖类生成与注入
- 默认配置:配置类(如RedisAutoConfiguration)通过@Bean方法定义默认Bean(如JedisConnectionFactory、RedisTemplate)。
- 自定义优先:@ConditionalOnMissingBean确保仅当用户未自定义Bean时,才注入默认实现。
- 属性绑定:@EnableConfigurationProperties绑定配置文件(如application.properties)中的属性到RedisProperties类,为Bean提供默认值。
4. 核心注解的作用
- @ConditionalOnClass:验证类路径依赖,决定配置类是否生效。
- @ConditionalOnMissingBean:实现用户自定义覆盖默认配置。
- @ConfigurationProperties:将配置文件属性映射到Java对象(如RedisProperties)。
5. 实际案例(Redis自动装配)
- 依赖引入:pom.xml中添加spring-boot-starter-data-redis后,类路径包含Jedis相关类。
- 配置生效:RedisAutoConfiguration被加载,生成RedisTemplate等Bean,并绑定spring.redis.host等默认属性。
- 用户覆盖:若用户显式定义@Bean RedisTemplate,则跳过默认注入。
总结:自动装配的本质是约定优于配置,通过spring.factories声明配置类,结合条件注解和属性绑定,在运行时动态生成并注入依赖,同时支持用户自定义扩展。这一机制大幅减少了传统Spring项目的XML配置,提升了开发效率。