springboot-Enable*和import註解
阿新 • • 發佈:2020-11-13
一、@Enable*註解原理:
通過這些@Enable*註解的原始碼可以看出,所有@Enable*註解裡面都有一個@Import註解,而@Import是用來匯入配置類的,所以@Enable*自動開啟的實現原理其實就是匯入了一些自動配置的Bean。
案例一:springboot工程是否可以直接獲取jar包中定義的bean?
方案一:使用@ComponentScan,掃描bean定義所在包
方案二:使用@Import,匯入bean定義類
方案三:自定義自動匯入註解,實質與方案二一樣
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(UserConfig.class)
public @interface EnableUser {
}
二、@Import註解的四種用法:
第一種:匯入Bean
第二種:匯入配置類
第三種:匯入ImportSelector實現類,一般用於載入配置檔案中的類
實現ImportSelector
public class MyImportSelector implements ImportSelector {
@Override
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
importingClassMetadata.getAnnotationTypes().forEach(System.out::println);
return new String[]{UserConfig.class.getName()};
}
引用
@Import(MyImportSelector.class)
第四種:匯入ImportBeanDefinitionRegistrar實現類
public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.rootBeanDefinition(User.class).getBeanDefinition();
registry.registerBeanDefinition("users",beanDefinition);
}
}