我们知道在 Spring Boot 中可以用一个 @Configuration 配置文件来配置所有 Bean 及其他配置(不会的看这篇文章:Spring零配置之@Configuration注解详解),但其实没必要这么做。

我们可以把相关的配置独立出来,放到多个 @Configuration 中,如以下参考:

  • MainConfiguration:项目主要配置
  • DataSoureceConfiguration:数据源配置
  • RedisConfiguration:Redis配置
  • MongoDBConfiguration:MongoDB配置

这时候 @Import 注解就能派上用场了,来看下它的源码:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Import { /**
* {@link Configuration}, {@link ImportSelector}, {@link ImportBeanDefinitionRegistrar}
* or regular component classes to import.
*/
Class<?>[] value(); }

可以导入这三类注册文件:

  • Configuration
  • ImportSelector
  • ImportBeanDefinitionRegistrar

第一个已经讲过了,其他两个后面会讲,关注Java技术栈微信公众号,获取第一时间推送。

先来看一个 @Import 示例,直接导入其他配置文件:

@Configuration
@Import({ RedisConfiguration.class })
public class MainConfiguration {
// ...
}

当然,如果这些配置文件都在类扫描路径下,不用 @Import 导入注解,直接用 @ComponentScan 也能搞定,这个默认的 @SpringBootApplication 注解就包含了,不需要再重复加。

再者,@Enable* 注解也能派上用场:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(RedisConfiguration.class)
public @interface EnableRedis {
}

具体可以参考这篇文章:Spring Enable*高级应用及原理,另外,关注Java技术栈微信公众号,在后台回复:spring,可以获取更多 Spring 干货。

那么问题来了,老项目想用 Spring Boot 框架,但还有大量的 XML 配置文件,很难迁移到 @Configuration 配置文件里面来,怎么处理?

栈长继续给你支招!

答案就是:@ImportResource 注解,来看下它的源码:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
public @interface ImportResource { @AliasFor("locations")
String[] value() default {}; @AliasFor("value")
String[] locations() default {}; Class<? extends BeanDefinitionReader> reader() default BeanDefinitionReader.class; }

@ImportResource 可以指定要导入的 XML 配置文件的路径,还能指定自定义的 BeanDefinitionReader

来一个示例,导入一个类路径下的 XML 配置文件:

@Configuration
@ImportResource("classpath:config/spring-mvc.xml")
public class MainConfiguration {
// ...
}

获取所有 Spring Boot 示例代码,请关注微信公众号 "Java技术栈" 在后台回复关键字:bootcode

通过本文的介绍,可以看出来 Spring Boot 现在对原有的 Spring MVC 传统项目是支持的非常好的,不管是 Servlet,还是 XML 配置文件,都可以轻松集成。

上面说的这些注解在《Spring Boot 最核心的 25 个注解》文章中都有说明,后面会逐步分解开来,关注Java技术栈微信公众号,获取第一时间推送。

Spring Boot 之配置导入,强大到不行!的更多相关文章

  1. 玩转Spring Boot 自定义配置、导入XML配置与外部化配置

    玩转Spring Boot 自定义配置.导入XML配置与外部化配置       在这里我会全面介绍在Spring Boot里面如何自定义配置,更改Spring Boot默认的配置,以及介绍各配置的优先 ...

  2. Springboot 系列(三)Spring Boot 自动配置原理

    注意:本 Spring Boot 系列文章基于 Spring Boot 版本 v2.1.1.RELEASE 进行学习分析,版本不同可能会有细微差别. 前言 关于配置文件可以配置的内容,在 Spring ...

  3. 转:spring boot log4j2配置(使用log4j2.yml文件)---YAML 语言教程

    转:spring boot log4j2配置(使用log4j2.yml文件) - CSDN博客http://blog.csdn.net/ClementAD/article/details/514988 ...

  4. Spring Boot自动配置与Spring 条件化配置

    SpringBoot自动配置 SpringBoot的自动配置是一个运行时(应用程序启动时)的过程,简化开发时间,无需浪费时间讨论具体的Spring配置,只需考虑如何利用SpringBoot的自动配置即 ...

  5. Spring Boot自动配置原理与实践(一)

    前言 Spring Boot众所周知是为了简化Spring的配置,省去XML的复杂化配置(虽然Spring官方推荐也使用Java配置)采用Java+Annotation方式配置.如下几个问题是我刚开始 ...

  6. Spring Boot自动配置原理(转)

    第3章 Spring Boot自动配置原理 3.1 SpringBoot的核心组件模块 首先,我们来简单统计一下SpringBoot核心工程的源码java文件数量: 我们cd到spring-boot- ...

  7. Spring Boot 自动配置的原理、核心注解以及利用自动配置实现了自定义 Starter 组件

    本章内容 自定义属性快速入门 外化配置 自动配置 自定义创建 Starter 组件 摘录:读书是读完这些文字还要好好用心去想想,写书也一样,做任何事也一样 图 2 第二章目录结构图 第 2 章 Spr ...

  8. Spring Boot 自动配置之@Conditional的使用

    Spring Boot自动配置的"魔法"是如何实现的? 转自-https://sylvanassun.github.io/2018/01/08/2018-01-08-spring_ ...

  9. Spring Boot 自动配置 源码分析

    Spring Boot 最大的特点(亮点)就是自动配置 AutoConfiguration 下面,先说一下 @EnableAutoConfiguration ,然后再看源代码,到底自动配置是怎么配置的 ...

随机推荐

  1. 文件的读取(txt文件)

    一.将读取文件夹内容,变为字典保存,代码如下: def read_class_names(class_file_name): '''loads class name from a file''' na ...

  2. PHP面试题2019年腾讯工程师面试题和答案

    一.单选题(共29题,每题5分) 1.PHP执行的时候有如下执行过程:Scanning(Lexing) - Compilation - Execution - Parsing,其含义分别为: A.将P ...

  3. 【MySQL】MySQL高可用架构之MHA

    一.关于MHA MHA(Master HA)是一款开源的MySQL的高可用程序,它为MySQL主从复制架构提供了automating master failover 功能.MHA在监控到master节 ...

  4. CSS 用法和特性

    一.CSS 基本用法 1.CSS 样式语法 样式是 CSS 最小的语法单元,每个样式包含两部分内容:选择器和声明(规则). 语法: p {font-size:12px; color:#333} 注意: ...

  5. Android 系统自带图片裁剪功能(适配7.0、8.0、对了还有小米手机)

    前段时间写了如何获取相册和拍照之后的照片并且进行显示和上传,这一次是如何进行圆形图像制作,经常看我写的笔记的人会知道,我很懒.那么我就懒的自定义了,目前需求就用原生的就好了,大神的轮子,我会在后面进行 ...

  6. elasticsearch Terms Query 实现类似于sql in查询

    本文demo基于elasticsearch 5.1.1,  项目中使用的还是较早的版本 例如 import com.alibaba.fastjson.JSON; import org.elastics ...

  7. Java开发环境之Svn

    查看更多Java开发环境配置,请点击<Java开发环境配置大全> 拾肆章:Svn安装教程 1)去官网下载TortoiseSVN安装包 https://tortoisesvn.net/ 2) ...

  8. shell中read用法

    1. Read的一些选项 Read可以带有-a, -d, -e, -n, -p, -r, -t, 和 -s八个选项. -a :将内容读入到数值中 1 2 3 echo -n "Input m ...

  9. Java SpringBoot 手记

    SpringBoot Git:https://github.com/spring-projects/spring-boot Maven (mvn)环境配置: 下载地址:http://maven.apa ...

  10. 如何测试Web服务.3

    -->全文字数:2254,需要占用你几分钟的阅读时间 ,您也可以收藏后,时间充足时再阅读- ->第一节讲了<Web服务基础介绍>,第二节讲了<Web服务测试工具> ...