一、准备工作

1、导入spring-context依赖

<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.22.RELEASE</version>
</dependency>

2、创建实体类Red、Blue、Yellow

public class Red {}
public class Blue {}
public class Yellow {}

二、注解使用

1、创建BeanConfig配置类

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;//@Import(Red.class)
@Import({Red.class, Yellow.class, Blue.class})
@Configuration
public class BeansConfig {}

2、开始测试

public static void main(String[] args) {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(BeansConfig.class);String[] names = context.getBeanDefinitionNames();for (String name:names) {System.out.println(name);}/*** @import注入bean的名称为:全类名* 包路径.Red* 包路径.Yellow* 包路径.Blue*/
}

三、ImportSelector

1、创建ColorSelector

import org.springframework.context.annotation.ImportSelector;
import org.springframework.core.type.AnnotationMetadata;public class ColorSelector implements ImportSelector {@Overridepublic String[] selectImports(AnnotationMetadata importingClassMetadata) {// 这里可以通过AnnotationMetadata处理业务逻辑,为了演示我们就尽量简单着来了return new String[]{Red.class.getName(), Blue.class.getName(), Yellow.class.getName()};}}

2、配置到@Import中

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;//@Import({Red.class, Yellow.class, Blue.class})
@Import(ColorSelector.class)
@Configuration
public class BeansConfig {}

3、重新测试,结果一致

四、ImportBeanDefinitionRegistrar

1、创建ColorRegistrar

import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.type.AnnotationMetadata;public class ColorRegistrar implements ImportBeanDefinitionRegistrar {@Overridepublic void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {// 如果red没有注入,则手动注入if(!registry.containsBeanDefinition(Red.class.getName())){RootBeanDefinition red = new RootBeanDefinition(Red.class);registry.registerBeanDefinition("red",red);}// 如果blue没有注入,则手动注入if(!registry.containsBeanDefinition(Blue.class.getName())){RootBeanDefinition blue = new RootBeanDefinition(Blue.class);registry.registerBeanDefinition("blue",blue);}// 如果yellow没有注入,则手动注入if(!registry.containsBeanDefinition(Yellow.class.getName())){RootBeanDefinition yellow = new RootBeanDefinition(Yellow.class);registry.registerBeanDefinition("yellow",yellow);}}}

2、配置到@Import中

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;//@Import(ColorSelector.class)
@Import(ColorRegistrar.class)
@Configuration
public class BeansConfig {}

3、再次测试,结果一致

三、总结分析

本章主要学习了,使用@Import注解注入Bean的三种方式。《参考资料》

Spring 使用@Import注入Bean的三种方式相关推荐

  1. 【Spring杂烩】探讨Spring向容器注册Bean的三种方式

    探讨Spring向容器注册Bean的三种方式 重点了解@Import实现的三种子方式 前提概要 Spring向容器注册Bean的三种方式 通过@ComponentScan.@Componet 通过@B ...

  2. 把对象的创建交给spring来管理——  1.创建bean的三种方式     2.bean对象的作用范围     3.bean对象的生命周期

    把对象的创建交给spring来管理 spring对bean的管理细节     1.创建bean的三种方式     2.bean对象的作用范围     3.bean对象的生命周期 创建Bean的三种方式 ...

  3. spring 注入bean的两种方式

    我们都知道,使用spring框架时,不用再使用new来实例化对象了,直接可以通过spring容器来注入即可. 而注入bean有两种方式: 一种是通过XML来配置的,分别有属性注入.构造函数注入和工厂方 ...

  4. Spring框架学习教程,详解Spring注入bean的几种方式

    首先,要学习Spring中的Bean的注入方式,就要先了解什么是依赖注入. 依赖注入是指:让调用类对某一接口的实现类的实现类的依赖关系由第三方注入,以此来消除调用类对某一接口实现类的依赖. Sprin ...

  5. Spring 创建Bean的三种方式

    创建Bean的三种方式 第一种方式:使用默认构造函数创建. 在spring的配置文件中使用bean标签,配以id和class属性之后,且没有其他属性和标签时.采用的就是默认构造函数创建bean对象,此 ...

  6. Spring创建Bean的三种方式的使用和区别

    在学习Spring的时候,发现Spring的IOC(控制反转)为我们提供的三种创建Bean的方式. 1.Spring创建Bean的三种方式 这里采用XML配置,分别演示三种创建Bean的方式和代码. ...

  7. SpringBoot静态获取 bean的三种方式,你学会了吗?

    欢迎关注方志朋的博客,回复"666"获面试宝典 来源:blog.csdn.net/showchi/article/details/97005720 注意:调用者要被spring管理 ...

  8. java bean 工厂模式_Spring框架通过工厂创建Bean的三种方式实现

    工厂模式 Spring中bean的创建,默认是框架利用反射new出来的bean实例.有时候也会有一些复杂的情况. 假设有一个飞机,属性如下,现在需要造很多同型号的飞机,那么唯一需要改变的属性只有Dri ...

  9. 五、创建Bean的三种方式

    五.创建Bean的三种方式 转载于:https://www.cnblogs.com/ljiwej/p/7280614.html

最新文章

  1. python实现字典遍历稳定有序使用collection包OrderedDict
  2. 邵阳计算机专业哪家最好,邵阳学院专业排名 最好的专业有哪些
  3. 2020年第一个候选Java增强提案已出现
  4. 更新电脑游戏安装合集,600+单机游戏,单机电脑游戏合集共约4T
  5. instancetype和id的区别
  6. matlab车辆贪心作业调度,贪心算法-区间调度-Interval Scheduling
  7. angularjs2--tab页调用父页面的方法
  8. stl源码剖析_STL源码剖析 阅读笔记(二)allocator
  9. 【剑指offer】面试题16:数值的整数次方(Java)
  10. 教你如何使用FusionInsight SqoopShell
  11. 【Word】关于Word文档写作中遇到的一些问题
  12. 音视频基础概念与流程
  13. flask基于保利威做视频认证
  14. 基于Qt的屏幕共享工具(含源码)
  15. 苹果手机查看mysql_教你苹果手机怎么查几个月或多天以前的通话记录
  16. Java嗖嗖移动项目
  17. Ubuntu修改Mac地址
  18. 模拟人生Java修改_模拟人生4 常用修改秘籍作弊码一览 修改秘籍怎么用
  19. UnRaid虚拟机添加光驱设备
  20. 什么是漏洞?最全的漏洞分类!

热门文章

  1. TSP问题禁忌搜索c++实现
  2. linux输入法切换
  3. Java培训分享Java中级面试题
  4. Mathematica和Wolfram语言面向数学的入门指南:极坐标
  5. 《NFL橄榄球》:新奥尔良圣徒·橄榄1号位
  6. 硬盘基本知识(磁头、磁道、扇区、柱面),格式化容量计算
  7. java删除文件中第二个a_如何在Java中删除包含其他文件夹的文件夹?
  8. 使用真机导致Androidstudio打印不出log
  9. MYSQL中的REPLACE函数,以及Hive中的regexp_replace的用法
  10. Python 里面什么时候用一个=,什么时候用两个=