Spring Boot 源码分析07 自动配置

自动配置:是 Spring Boot 提供的,实现通过 jar 包的依赖,能够自动配置应用程序。例如说:我们引入 spring-boot-starter-web 之后,就自动引入了 Spring MVC 相关的 jar 包,从而自动配置 Spring MVC

自动装配:是 Spring 提供的 IoC 注入方式

如下是一个比较简单的总结:

  1. Spring Boot 在启动时扫描项目所依赖的 jar 包,寻找包含spring.factories 文件的 jar 包。
  2. 根据 spring.factories 配置加载 AutoConfigure 类。
  3. 根据 @Conditional 等条件注解 的条件,进行自动配置并将 Bean 注入 Spring IoC 中。

 

 

 

@SpringBootApplication

一、@Inherited注解

       使用此注解声明出来的自定义注解,在使用自定义注解时,如果注解在类上面时,子类会自动继承此注解,否则的话,子类不会继承此注解

二、@SpringBootConfiguration

       可以看到,它上面继承自 @Configuration 注解,所以两者功能也一致,可以将当前类内声明的一个或多个以 @Bean 注解标记的方法的实例纳入到 Srping 容器中,并且实例名就是方法名。

三、@ComponentScan

    扫描指定路径下的 Component

四、@EnableAutoConfiguration

       org.springframework.boot.autoconfigure.@EnableAutoConfiguration 注解,用于开启自动配置功能,是 spring-boot-autoconfigure 项目最核心的注解

   org.springframework.boot.autoconfigure.@AutoConfigurationPackage 注解,主要功能自动配置包,它会获取主程序类所在的包路径,并将包路径(包括子包)下的所有组件注册到 Spring IOC 容器中

5. AutoConfigurationImportSelector

org.springframework.boot.autoconfigure.AutoConfigurationImportSelector ,实现 DeferredImportSelector、BeanClassLoaderAware、ResourceLoaderAware、BeanFactoryAware、EnvironmentAware、Ordered 接口,处理 @EnableAutoConfiguration 注解的资源导入。

5.1 getCandidateConfigurations

#getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) 方法,获得符合条件的配置类的数组

<1> 处,调用 #getSpringFactoriesLoaderFactoryClass() 方法,获得要从 META-INF/spring.factories 加载的指定类型为 EnableAutoConfiguration 类

   调用 SpringFactoriesLoader#loadFactoryNames(Class<?> factoryClass, ClassLoader classLoader) 方法,加载指定类型 EnableAutoConfiguration 对应的,在 META-INF/spring.factories 里的类名的数组

  • <1> 处,调用 DeferredImportSelector.Group#process(AnnotationMetadata metadata, DeferredImportSelector selector) 方法,处理被 @Import 注解的注解。
  • <2> 处,调用 DeferredImportSelector.Group#this.group.selectImports()

5.3 AutoConfigurationGroup

5.3.3 selectImports

#selectImports() 方法,获得要引入的配置类

5.4 getAutoConfigurationEntry

艿艿:这是一个关键方法。因为会调用到,我们会在 「5.1 getCandidateConfigurations」 的方法。

#getAutoConfigurationEntry(AutoConfigurationMetadata autoConfigurationMetadata, AnnotationMetadata annotationMetadata) 方法,获得 AutoConfigurationEntry 对象

 

1.去掉重复的配置类,去掉需要排除的配置类,过滤掉不符合条件的配置类

2.触发自动配置类引入完成的事件

3.创建对应的AutoConfigurationEntry对象

5.4.1 isEnabled

#isEnabled(AnnotationMetadata metadata) 方法,判断是否开启自动配置

5.4.2 getAttributes

#getAttributes(AnnotationMetadata metadata) 方法,获得注解的属性

5.4.3 getExclusions

#getExclusions(AnnotationMetadata metadata, AnnotationAttributes attributes) 方法,获得需要排除的配置类

5.4.4 checkExcludedClasses

#checkExcludedClasses(List<String> configurations, Set<String> exclusions) 方法,校验排除的配置类是否合法

5.4.5 fireAutoConfigurationImportEvents

#fireAutoConfigurationImportEvents(List<String> configurations, Set<String> exclusions) 方法,触发自动配置类引入完成的事件

 

6.1 Registrar

Registrar ,是 AutoConfigurationPackages 的内部类,实现 ImportBeanDefinitionRegistrar、DeterminableImports 接口,注册器,用于处理 @AutoConfigurationPackage 注解

 

6.2 register

#register(BeanDefinitionRegistry registry, String... packageNames) 方法,注册一个用于存储报名(package)的 Bean 到 Spring IoC 容器中

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值