简述

@Import注解import的是其他地方定义的Bean,将松散的Bean集合在一起。

既可以引入普通类作为Bean,又可以引入标记了@Configuration类中的所有Bean。

1. 引入方式一:直接引入Bean
例子:

  • 创建要被引入的bean
public class ImportedBean {}
  • 创建配置类,并加上@Import注解引入ImportedBean,在main中获取ImportedBean
@Import(ImportedBean.class)
@Configuration
public class ImportingClass {public static void main(String[] args) {ApplicationContext context = new AnnotationConfigApplicationContext(ImportingClass.class);ImportedBean importedBean = context.getBean(ImportedBean.class);System.out.println(importedBean);}}

运行结果:

2. 引入方式二:引入标有@Configuration的类中的所有bean
例子:

@Configuration
public class ImportedConfig {@Beanpublic ImportedBean getImportedBean(){return new ImportedBean();}
}
@Import(ImportedConfig.class)
@Configuration
public class ImportingClass {public static void main(String[] args) {ApplicationContext context = new AnnotationConfigApplicationContext(ImportingClass.class);ImportedBean importedBean = context.getBean(ImportedBean.class);System.out.println(importedBean);}}

运行结果:

3. 引入方式三:通过ImportSelector个性化的引入想要的bean

@Import(MyImportSelector.class)
@Configuration
public class ImportingClass {public static void main(String[] args) {ApplicationContext context = new AnnotationConfigApplicationContext(ImportingClass.class);ImportedBean importedBean = context.getBean(ImportedBean.class);System.out.println(importedBean);}
}
public class MyImportSelector implements ImportSelector {@Overridepublic String[] selectImports(AnnotationMetadata importingClassMetadata) {return new String[]{"testimport.ImportedBean"};}
}

4.引入方式四:指定实现ImportBeanDefinationRegistrar的类,用于重定义要导入的Bean
与ImportSelector用法与用途类似,但是如果我们想重定义Bean,例如动态注入属性,改变Bean的类型和Scope等等,就需要通过指定实现ImportBeanDefinitionRegistrar的类实现。

public class MyImportBeanDefinationRegistrar implements ImportBeanDefinitionRegistrar {@Overridepublic void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {//BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(ImportedBean.class).addConstructorArgValue("testName");registry.registerBeanDefinition("importedBeanUsingRegistrar",builder.getRawBeanDefinition());}
}
@Import(MyImportBeanDefinationRegistrar.class)
@Configuration
public class ImportingClass {public static void main(String[] args) {ApplicationContext context = new AnnotationConfigApplicationContext(ImportingClass.class);ImportedBean importedBean = (ImportedBean) context.getBean("importedBeanUsingRegistrar");System.out.println(importedBean);System.out.println(importedBean.getName());}}

【Spring】@Import注解详解相关推荐

  1. Spring Boot注解详解

    文章目录 使用注解的优势 注解详解(配备了完善的释义) 注解列表如下 JPA注解 springMVC相关注解 全局异常处理 项目中具体配置解析和使用环境 使用注解的优势 采用纯java代码,不在需要配 ...

  2. Spring新注解详解

    使用上面的注解还不能全部替代xml配置文件,还需要使用注解替代的配置如下: 非自定义的Bean的配置:<bean> 加载properties文件的配置:context:property-p ...

  3. 一篇全了解Spring全注解详解

    目录 用于创建对象 1.Component 2.Controller 3.Service 4.Repository 用于注入数据 1.Autowired 2.Qulifier 3.Resource 4 ...

  4. @Import注解详解

    @Import注解提供了三种用法 1.@Import一个普通类 spring会将该类加载到spring容器中 2.@Import一个类,该类实现了ImportBeanDefinitionRegistr ...

  5. 被各种注解搞晕了?那快来看看Spring Bean注解详解!

    前言 本篇博客中,我们将会讨论用于声明不同类型 Beans 的几种最常用的 Spring Bean 注解. 众所周知,Spring 容器中有许多配置 Bean 的方法,我们既可以通过 XML 配置,也 ...

  6. Spring cache 注解详解

    spring cache注解的使用: @CacheConfig 类级别的缓存注解,允许共享缓存名称 @Caching 将多种缓存操作分组 @Cacheable 触发缓存入口 @CacahePut 更新 ...

  7. ideal如何快速导入import_Spring的@Import注解详解

    首先看下@Import的javadoc文档: Provides functionality equivalent to the <import/> element in Spring XM ...

  8. @mapperscan注解_Spring的@Import注解详解

    首先看下@Import的javadoc文档: Provides functionality equivalent to the <import/> element in Spring XM ...

  9. 原理探究:Spring @Value注解详解

    前 言 对于从事java开发工作的小伙伴来说,spring框架肯定再熟悉不过了.spring给开发者提供了非常丰富的api,今天咱们重点聊聊@Value注解,因为它是一个非常有用,但极其容易被忽视的注 ...

最新文章

  1. [转]获取Setup文件的运行路径
  2. 1951: [Sdoi2010]古代猪文
  3. 一、mysql使用入门
  4. 服务器打不QQ显示00001,QQ登录超时00001怎么处理?
  5. OpenCV中Mat总结
  6. 部署HDFS HA的环境
  7. 7.请解释泛型list集合的长度为什么动态的?_Java面试题集合篇一
  8. gtk-vnc linux,vncviewer远程链接桌面linux
  9. HTML5 响应式网页设计之页面美化(一.响应式布局)
  10. pic单片机c语言编程优势,PIC单片机与PIC单片机C语言编程简介
  11. ASC2BCD及奇偶校验位
  12. 最简洁的富文本编辑器
  13. 将路由器当成交换机使用
  14. Could not extract response: no suitable HttpMessageConverter found for response type [class com.exam
  15. IPFS和梅克尔森林
  16. 经典物理建模钢琴-4Front TruePianos v1.9.8 WiN-MAC
  17. android arcgis使用自定义图片背景底图(tif图片制作)
  18. 高中数学知识点:集合知识讲解
  19. Android 中利用XPosed拦截系统消息
  20. CF1631F. Flipping Range dp **

热门文章

  1. android中默认短信,android开发中设置默认短信应用的两种方法
  2. win7计算机建立无线网络连接不上,Win7笔记本无线网络连接不上如何解决?
  3. 处理医疗影像的Python利器:PyDicom
  4. 2005年3月13日
  5. 威海二职工业机器人专业_工业机器人专业介绍和前景分析二
  6. 笔记:FPGA与VHDL语言学习3
  7. vue实现鼠标放上去就有提示_Vue实现鼠标经过文字显示悬浮框效果的示例代码
  8. 计算机基础教案免费,计算机基础教案(20190417033410)
  9. 乱码 Linux,linux中文乱码【图文教程】
  10. 蚂蚁金服和他的小伙伴又在搞事情了