Spring注解@Import

@Import

根据spring 官方API文档描述:

@Import表示要导入的一个或多个@Configuration类。提供与Spring XML中的<import />元素等效的功能。允许导入@Configuration类,ImportSelector和ImportBeanDefinitionRegistrar实现,以及常规组件类。

从Spring Framework 4.2开始,@ Immort还支持对常规组件类的引用,类似于AnnotationConfigApplicationContext.register方法。如果您想避免组件扫描,使用一些配置类作为显式定义所有组件的入口点,这将特别有用。

可以在类级别声明或作为元注释声明。

如果需要导入XML或其他非@Configuration bean定义资源,请改用@ImportResource注释。

1.直接导入@Configuration配置类

// 添加一个简单对象类
public class Director {
}
// 添加配置类并导入上面的简单类
@Configuration
@Import({Director.class})
public class Config {
}
// 添加测试类
public static void main(String[] args) {
    AnnotationConfigApplicationContext context = 
        new AnnotationConfigApplicationContext(Config.class);
    Director bean = context.getBean(Director.class);
    System.out.println(bean);
}

输入结果如下:

com.example.demo.im.Director@1372ed45

2.导入ImportSelector实现类

这里我们不叙述关于ImportSelector相关内容,将在另一篇文章中单独叙述。这里我们只使用。 主要是参考 spring 官方 API 文档。

添加ImportSelector实现:

public class MyImportSelector implements ImportSelector {
    @Override
    public String[] selectImports(AnnotationMetadata importingClassMetadata) {
        return new String[]{"com.example.demo.im.Director"};
    }
}

修改配置类,导入自定义ImportSelector:

@Configuration
@Import({MyImportSelector.class})
public class Config {
}

运行main方法得到如下输出:

com.example.demo.im.Director@4d49af10

3.实现ImportBeanDefinitionRegistrar

实现:

public class Register implements ImportBeanDefinitionRegistrar {
    @Override
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata,
                                        BeanDefinitionRegistry registry) {
        RootBeanDefinition definition = new RootBeanDefinition(Director.class);
        registry.registerBeanDefinition("director", definition);
    }
}

修改配置类:

@Configuration
@Import({Register.class})
public class Config {
}

运行main方法:

com.example.demo.im.Director@25359ed8

转载于:https://my.oschina.net/u/1176977/blog/1982873

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值