SpringBoot自动装配原理

什么是SpringBoot?

使用Spring框架的应用开发中,在SpringBoot出现之间,主流的开发都是使用SpringMVC进行开发。MVC的应用开发使用到的IOC/AOP都需要通过配置文件applicationContext.xml进行配置。这时一个非常繁琐的事情。
那么SpringBoot出现之后,大大的减少了这些繁琐的工作,使应用开发者能够快速的构建一个应用,而不用去管理这些多而杂的xml配置文件。
SpringBoot通过封装Spring框架达到快速开发的实现。
SpringBoot的设计

  • 约定优于配置
    • 约定默认以jar包形式打包、目录结构(resources/templates/static...)
    • 约定starter的形式
    • 约定默认application.properties

@SpringBootApplication注解

@SpringBootApplication是一个复合注解,包含三个注解

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
        @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
        @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication{
}

@SpringBootConfiguration

本质使用的是@Configuration,用于生成JavaConfig,从Spring3开始支持。

@ComponentScan

默认扫描当前包下包含@Component的类,托管到IOC容器中。

@EnableAutoConfiguration

包含两个注解

@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)

其中@AutoConfigurationPackage包含

@Import(AutoConfigurationPackages.Registrar.class)

我们看下AutoConfigurationPackages.RegistrarAutoConfigurationImportSelector

AutoConfigurationImportSelector

ImportSelector的方式通过实现Spring提供的ImportSelector接口,实现它的selectImports方法返回需要托管到IOC的bean类。通过这种形式,可以在selectImports方法做一些逻辑处理,实现诸如过滤、判断等额外操作。
AutoConfigurationImportSelector中主要是通过SpringBoot的SPI机制,SpringFactoriesLoader返回所有需要加载的class路径。

AutoConfigurationPackages.Registrar

Registrar方式则是通过实现ImportBeanDefinitionRegistrar接口的registerBeanDefinitions方法,实现的bean的注册托管。其实现是新建BeanDefinition再调用BeanDefinitionRegistry注册这个bean实现IOC托管。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容