美文网首页
Spring-@Import注解的三种方式给容器中导入组件

Spring-@Import注解的三种方式给容器中导入组件

作者: Wannay | 来源:发表于2021-05-11 02:04 被阅读0次
  1. 直接传入我们需要导入的Class对象
@Import(PowerBean.class)
@Configuration
public class ImportAppConfig {
}

使用这种方式Spring会给我们导入PowerBean这个BeanDefinition,并且beanDefinitionName为它的全类名。它使用的是无参数构造方法给容器中注册组件,并且beanDefinitionName为组件的全类名。

  1. 使用@Import(ImportSelector.class)的方式
public class MyImportSelector implements ImportSelector {
    @Override
    public String[] selectImports(AnnotationMetadata importingClassMetadata) {
        String[] beans = {"com.wanna.bean.bean.PowerBean"};
        return beans;
    }
}

使用这种方式我们可以实现ImportSelector接口,重写electImports接口,返回一个字符串数组(放的是全类名),从而给容器中注册一些组件,注册的组件的beanDefinitionName就是组件的全类名

@Import(MyImportSelector.class)
@Configuration
public class ImportAppConfig {
}
  1. 使用@Import(ImportBeanDefinitionRegistrar.class)的方式

我们使用如下的方式去自定义我们自己的ImportBeanDefinitionRegistrar,并通过重写registerBeanDefinitions方法给我们容器中注入组件,通过BeanDefinitionRegistry来给容器中注册组件,在注册时可以指定beanDefinitionName

public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
    @Override
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
        RootBeanDefinition bd = new RootBeanDefinition();
        bd.setBeanClass(BookBean.class);
        registry.registerBeanDefinition("bookBean", bd);
    }
}

使用如下的方式导入我们自己的ImportBeanDefinitionRegistrar。

@Import(MyImportBeanDefinitionRegistrar.class)
@Configuration
public class ImportAppConfig {
}

我们就能将我们自己的BeanDefinition注册到容器中,这种方式在SpringAOP/SpringBoot中都在进行使用。

相关文章

网友评论

      本文标题:Spring-@Import注解的三种方式给容器中导入组件

      本文链接:https://www.haomeiwen.com/subject/kikcdltx.html