SpringBoot的自动装配
发布网友
发布时间:6小时前
我来回答
共1个回答
热心网友
时间:2024-10-05 17:30
SpringBoot相对Spring、SpringMVC,简化了大量配置,实现快速上手。其便利性源自自动装配机制,本文将深入解读SpringBoot自动装配的原理。
自动装配的核心在于@SpringBootApplication注解,它集成了@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan。本文将详解这三个注解的功能。
@SpringBootConfiguration注解实际是@Configuration的衍生注解,与@Configuration功能类似,标识类为配置类。@SpringBootConfiguration注解是SpringBoot特有的。
EnableAutoConfiguration注解主要功能是查找应用中符合条件的配置类,并将其加载为Bean加入Spring容器。该注解带有Import注解,导入类实例化为Bean。重点在于Import注解中类AutoConfigurationImportSelector。
AutoConfigurationImportSelector实现DeferredImportSelector接口,该接口实现ImportSelector接口。重写ImportSelector的selectImports方法,利用Spring的SPI技术加载Spring.factories中配置的EnableAutoConfiguration类。解析过程发生在SpringBoot启动时。
SpringBoot自动装配中,AutoConfigurationImportSelector实现DeferredImportSelector的关键是为了让程序员定义的Bean优先级更高。自动配置类中的条件注解,如ConditionalOnMissingClass、ConditionalOnMissingBean、ConditionalOnClass、ConditionalOnBean,根据是否存在特定Bean决定是否创建。实现灵活配置。
自动配置时,可通过注解决定是否加载成Bean。
SpringBoot中的条件注解包括:
ComponentScan注解用于定义扫描路径,找出需要自动装配的类并添加至Spring容器。通常使用@Controller、@Service、@Repository、@Component注解标识的类会被自动装配。ComponentScan通过includeFilters加入未标注上述注解的类,excludeFilters过滤掉不需加入容器的类。