Spring Boot自动注入原理

Posted ゛鱼记忆不止七秒つ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot自动注入原理相关的知识,希望对你有一定的参考价值。

启用自动注入

使用注解@EnableAutoConfiguration开启自动注入功能。

@EnableAutoConfiguration

@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
	// ignore...
}

@AutoConfigurationPackage

@Import(AutoConfigurationPackages.Registrar.class)
public @interface AutoConfigurationPackage {

}

Spring Boot通过AutoConfigurationImportSelector.classAutoConfigurationPackages.Registrar.class这两个类配合使用,实现动态注入。
其中,类AutoConfigurationImportSelector.class会加载spring-autoconfigure-metadata.properties,并且进行过滤筛选,将需要动态注入的类全路径交给AutoConfigurationPackages.Registrar.class进行初始化注入。


动态注入SpingBean

实现bean动态注入可以通过两种方式。

方案一:实现ImportSelector接口

/* @author Chris Beams
 * @since 3.1
 * @see DeferredImportSelector
 * @see Import
 * @see ImportBeanDefinitionRegistrar
 * @see Configuration
 */
public interface ImportSelector {

   /**
    * Select and return the names of which class(es) should be imported based on
    * the {@link AnnotationMetadata} of the importing @{@link Configuration} class.
    */
   String[] selectImports(AnnotationMetadata importingClassMetadata);

}

方案二:实现ImportSelector接口

/* @author Chris Beams
 * @since 3.1
 * @see Import
 * @see ImportSelector
 * @see Configuration
 */
public interface ImportBeanDefinitionRegistrar {

   /**
    * Register bean definitions as necessary based on the given annotation metadata of
    * the importing {@code @Configuration} class.
    * @param importingClassMetadata annotation metadata of the importing class
    * @param registry current bean definition registry
    */
   void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry);

}

以上是关于Spring Boot自动注入原理的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot源码-@EnableConfigurationProperties @ConfigurationProperties注解配置原理

有啥好书讲解spring框架的原理和用法的麽

Spring Boot 工作原理剖析

Spring Boot

Spring Boot 揭秘与实战 源码分析 - 工作原理剖析

Spring boot下@Autowired 注入为 NULL的问题