程序员的知识教程库

网站首页 > 教程分享 正文

Spring中,你知道@Import几种用法?

henian88 2024-09-09 03:44:46 教程分享 9 ℃ 0 评论

导入普通类

直接将该类当作Bean

@Import(Helper.class)
@Configuration
public class MyConfig {
}

ImportSelector类型

将selectImports()方法返回的类当作Bean

public class MyImportSelector implements ImportSelector {
    @Override
    public String[] selectImports(AnnotationMetadata importingClassMetadata) {
        return new String[]{
                RoleService.class.getName(),
                UserService.class.getName()
        };
    }
}

DeferredImportSelector类型

将selectImports()方法返回的类当作Bean;与ImportSelector类型的区别在于执行selectImport()的时机不同

示例:

public class MyDeferredSelector implements DeferredImportSelector {
    @Override
    public String[] selectImports(AnnotationMetadata importingClassMetadata) {
        return new String[]{
                RoleService.class.getName(),
                UserService.class.getName()
        };
    }
}

DeferredImportSelector接口是ImportSelector接口的子接口,该接口会在所有的@Configuration配置类(不包括自动化配置类,即spring.factories文件中的配置类)处理完成后运行。

当选择器和@Conditional条件注解一起使用时是特别有用的,此接口还可以和接口Ordered或者@Ordered一起使用,定义多个选择器的优先级。

ImportBeanDefinitionRegistrar类型

在registerBeanDefinitions()方法中注册BeanDefinition。

public class MyImportRegistrar implements ImportBeanDefinitionRegistrar {

    @Override
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {

        BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition();

        AbstractBeanDefinition userBeanDefinition = builder.getBeanDefinition();
        userBeanDefinition.setBeanClass(UserService.class);
        registry.registerBeanDefinition("userService", userBeanDefinition);

    }
}

详细代码参见:ijunfu/My Java - Gitee.com

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表