1. 程式人生 > 實用技巧 >springboot-Enable*和import註解

springboot-Enable*和import註解

一、@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);
}
}