当前位置:   article > 正文

SpringBoot教学篇------SpringBoot自动配置原理_spring-boot-autoconfigure

spring-boot-autoconfigure

一、SpringBoot自动配置的注解@AutoWired

SpringBoot的自动配置就是当Spring容器启动后,一些自动配置类(只是自动配置类,并不是当前的组件配置到IOC容器中,自动配置类通过@Conditional注解来按需配置)就自动装配的IOC容器中,不需要我们手动注入,从而简化了开发,省去繁琐的配置。

可以在Application.properties中增加的属性值

Common Application Properties

二、SpringBoot的自动配置原理

一个SpringBoot工程如果想运行成功,就必须有一个主程序类(被@SpringBootApplication注解标识),而自动配置的相关工作就在@SpringBootApplication这个注解上。

 当我们进入@SpringBootApplication注解的源码当中,可以发现它是一个复合注解,它由@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan这三个注解组成。

1、@SpringBootConfiguration

在@SpringBootConfiguration源码中可以发现有@Configuration,代表一个配置类,说明主程序类也是一个配置类。

2、@ComponentScan

指定扫描哪些组件,默认是扫描主程序所在的包以及其子包。

3、@EnableAutoConfiguration

1

2

3

4

5

6

7

@Target(ElementType.TYPE)

@Retention(RetentionPolicy.RUNTIME)

@Documented

@Inherited

@AutoConfigurationPackage

@Import(AutoConfigurationImportSelector.class)

public @interface EnableAutoConfiguration {<br>}

@AutoConfigurationPackage注解

将指定的一个包下的所有组件导入容器当中

自动配置包

在@AutoConfigurationPackage注解中存在一个@Import(AutoConfigurationPackages.Registrar.class)注解,自动配置包就是通过这个Registrar类的方法来完成的。

1

2

@Import(AutoConfigurationPackages.Registrar.class)

public @interface AutoConfigurationPackage {

 

 

由于@AutoConfiguraionPackage是在@EnableAutoConfiguration中,所以@AutoConfigurationPackage是标识在主程序类上,所以metadata为主程序类。

在Registrar中的registerBeanDefinitions方法,首先获取到注解所标识的类,然后将这个类所在的包以及子包的名称放入到一个String数组当中,再将String数组中的包的所有组件导入到容器当中。

1

2

3

4

5

static class Registrar implements ImportBeanDefinitionRegistrar, DeterminableImports {

  @Override

  public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {

    register(registry, new PackageImports(metadata).getPackageNames().toArray(new String[0]));

}

这个方法的意思就是将包下的所有组件导入,获取到包名,然后将包名存放到一个String数组中,Register的作用就是将包下的所有组件导入。这也是为什么Spring容器启动后会自动导入 主程序所在的包及其子包中的所有组件。

@Import(AutoConfigurationImportSelector.class)

1

2

3

4

5

6

7

8

@Override

public St

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/165685?site
推荐阅读
相关标签
  

闽ICP备14008679号