Spring Boot 自动装配流程

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

Spring Boot 自动装配流程

SuperMaskv   2020-03-11 我要评论
# Spring Boot 自动装配流程 本文以 mybatis-spring-boot-starter 为例简单分析 Spring Boot 的自动装配流程。 ## Spring Boot 发现自动配置类 这里说的自动配置类指的是在 `META-INF/spring.factories` 文件中声明的 `XXXAutoConfiguration` 类。 首先,我们从 `@SpringBootApplication` 注解的定义中,我们可以发现有一个叫做 `@EnableAutoConfiguration` 的注解,这也是 SpringBoot 实现自动装配最关键的注解。 ```java //@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 {}; } ``` `@Target` `@Retention` `@Documented` `@Inherited` 都是 jdk 提供的注解,有兴趣可以去查查看,这里就不做分析了。这里主要分析 `@AutoConfigurationPackage` 和 `@Import({AutoConfigurationImportSelector.class})` 究竟起到什么作用。 ```java //@AutoConfigurationPackage 注解的定义 @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @Import({Registrar.class}) public @interface AutoConfigurationPackage { } ``` 在 `@AutoConfigurationPackage` 注解的定义中,我们又发现一个 `@Import` 注解。`@Import` 注解是由 Spring 提供的,作用是将某个类实例化并加入到 Spring IoC 容器中。所以我们要想知道 `@Import({Registrar.class})` 究竟做了什么就需要了解 `Registrar` 这个类里包含了哪些方法。 ```java //Registrar 类的定义 static class Registrar implements ImportBeanDefinitionRegistrar, DeterminableImports { Registrar() { } public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) { AutoConfigurationPackages.register(registry, (new AutoConfigurationPackages.PackageImport(metadata)).getPackageName()); } public Set

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们