啟用自動注入
使用注解@EnableAutoConfiguration
開啟自動注入功能。
@EnableAutoConfiguration
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
// ignore...
}
@AutoConfigurationPackage
@Import(AutoConfigurationPackages.Registrar.class)
public @interface AutoConfigurationPackage {
}
Spring Boot通過AutoConfigurationImportSelector.class
和AutoConfigurationPackages.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);
}