美文网首页
Spring Boot的自动装配

Spring Boot的自动装配

作者: _52Hertz | 来源:发表于2020-03-01 13:31 被阅读0次

Spring Boot的自动装配的结构图:

结构图

入口点:SpringBoot的引导类有如下内容:

@SpringBootApplication
public class TestApplication {
    public static void main(String[] args) {
      SpringApplication.run(TestApplication.class,args);
   }
}

@SpringBootApplication注解:

@SpringBootApplication是一个组合注解,主要是以下三个注解:
@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan

查看源码:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
...
}

@SpringBootConfiguration注解:

查看源码:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {
    @AliasFor(
        annotation = Configuration.class
    )
    boolean proxyBeanMethods() default true;
}

看源码发现有一个@Configuration注解,这个注解是用来标识某一个类为Spring的
一个配置类,@SpringBootConfiguration注解和@Configuration注解的作用是一样的,但是Spring Boot更推荐@SpringBootConfiguration注解。

@EnableAutoConfiguration注解:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
    String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";

    Class<?>[] exclude() default {};

    String[] excludeName() default {};
}

@EnableAutoConfifiguration注解也是组合注解,主要包含@AutoConfigurationPackage和
@Import。

@AutoConfigurationPackage注解:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Import({Registrar.class})
public @interface AutoConfigurationPackage {
}

该注解通过@Import引入了一个Registrar.class类,Registrar类主要是加载@SpringBootApplication注解所
在类的包结构,并进行存储,为后期Spring Boot加载资源提供一个扫描的包路径。

@Import(AutoConfigurationImportSelector.class)

上述@Import注解引入了一个类AutoConfigurationImportSelector.class,读取该类的源代码会发现,SpringBoot启动所在的装配类都在该注解类所在项目的META-INF/spring.factories文件中读取

image.png

Spring Boot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作。以前我们需要自己配置的东西,自动配置类都帮我们完成了。

image.png
image.png

相关文章

网友评论

      本文标题:Spring Boot的自动装配

      本文链接:https://www.haomeiwen.com/subject/dsfmhhtx.html