主题切换
springboot自动配置原理
一、核心注解:@SpringBootApplication
@SpringBootApplication 是SpringBoot项目的核心启动注解,它封装了三个关键注解:
@SpringBootConfiguration:本质是@Configuration,声明当前类为配置类;@EnableAutoConfiguration:自动配置的核心注解;@ComponentScan:组件扫描,默认扫描当前引导类所在包及其子包。
二、自动配置核心:@EnableAutoConfiguration
@EnableAutoConfiguration 是实现自动化配置的关键,其工作流程如下:
- 通过
@Import导入AutoConfigurationImportSelector; - 读取项目及依赖Jar包的
classpath下META-INF/spring.factories文件; - 加载文件中配置的所有自动配置类的全类名;
- 这些配置类中的Bean会根据条件注解决定是否导入Spring容器。
三、条件注解的作用
自动配置类中通过条件注解实现按需加载,常见注解:
@ConditionalOnClass:判断类路径中是否存在指定类,存在时才加载配置;@ConditionalOnMissingBean:判断Spring容器中是否不存在指定Bean,不存在时才创建Bean;@ConditionalOnProperty:判断配置文件中是否存在指定属性,满足条件时才加载配置。
示例:Redis自动配置类
java
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass({RedisOperations.class})
@EnableConfigurationProperties({RedisProperties.class})
@Import({LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class})
public class RedisAutoConfiguration {
@Bean
@ConditionalOnMissingBean(name = {"redisTemplate"})
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<Object, Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
}四、完整自动配置流程
- 启动类添加
@SpringBootApplication注解; @EnableAutoConfiguration触发,通过AutoConfigurationImportSelector读取spring.factories;- 加载所有自动配置类,根据条件注解判断是否生效;
- 生效的配置类向Spring容器中注册Bean,完成自动配置;
- 项目根据依赖自动装配所需组件,无需手动编写配置。
面试相关问题
问:SpringBoot自动配置的原理是什么?答: SpringBoot自动配置的核心是
@EnableAutoConfiguration注解,它通过AutoConfigurationImportSelector读取META-INF/spring.factories文件中配置的自动配置类,再根据条件注解(如@ConditionalOnClass、@ConditionalOnMissingBean)判断这些配置类是否生效,生效的配置类会向Spring容器中注册Bean,从而实现根据项目依赖自动装配组件,无需手动编写XML配置。问:@SpringBootApplication注解由哪几个注解组成?各自的作用是什么?答: 它由三个注解组成:
@SpringBootConfiguration:声明当前类为配置类,可定义Bean;@EnableAutoConfiguration:自动配置的核心,加载并条件化生效自动配置类;@ComponentScan:组件扫描,默认扫描当前引导类所在包及其子包,注册标注了@Component、@Service等注解的Bean。
问:spring.factories文件的作用是什么?答:
spring.factories文件位于META-INF目录下,用于配置所有自动配置类的全类名。SpringBoot启动时会读取该文件,加载其中的自动配置类,再根据条件注解判断是否生效,是自动配置实现的关键文件。问:条件注解在自动配置中的作用是什么?答: 条件注解(如
@ConditionalOnClass、@ConditionalOnMissingBean)用于控制自动配置类的生效条件,确保只有当项目中存在指定依赖、配置或Bean时,对应的自动配置才会生效,避免不必要的Bean注册,实现按需自动装配。