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);

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM