SpringBoot2 系列往期回顾:


  接下来这一篇主要是对 配置类(Configuration Classes) 和 自动配置(Auto-configuration) 进行说明,分别参考 15. Configuration Classes 和 16. Auto-configuration ,目录如下:

一、配置类(Configuration Classes)

  Spring Boot 支持 基于 xml 的配置,但更偏向于使用基于 Java 的配置,通常建议使用定义有 main 方法的主 @Configuration 类(主配置类)

小提示:对于基于 xml 的 spring 配置,建议尽可能使用对等的基于 java 的配置进行替换,使用 Enable* 注解会是一种比较好的切入方式。

1、导入其他的 Configuration Classes

  所有的 @Configuration 并不需要都放置在同一个类中,可以考虑分散在多个类,并且通过 @Import 注解 导入。另一种方式则是通过使用 @ComponentScan 自动扫描 spring 配置,其中就包含了 @Configuration classes 。这对于导入其他项目的配置类或者公共配置类就显得比较重要了。毕竟默认的 @SpringBootApplication 只会扫描所在的 root package ,并不一定所有的配置类都会在这个默认包路径下。

  举个例子,在 com.wpbxin 这个 root package 下,我们建一个 config 包,也就是 com.wpbxin.config,专门用于存放各种 @Configuration ,这样,主类就完全不需要关注到底需要进行哪些扫描配置,因为这些都会被默认加载, config 中的任何增删在代码层面对主类都是无感的:

package com.wpbxin.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import; @Configuration
@Import({com.wpbxin.config.XMLConfig.class,com.wpbxin.config.MapperConfig.class})
public class ImportConfig { } package com.wpbxin.config; import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration; @Configuration
@ComponentScan("com.wpbxin.mapper")
public class MapperConfig { }

2、导入 xml 配置

  确实还是需要使用 xml 配置的,建议还是从 @Configuration 类开始,通过 @ImportResource 注解来加载 xml 配置文件。举个例子,如果旧项目中配置了 dubbo 的xml文件,可以通过以下这种方式引进来,后续如果换成其他 RPC 框架,可以直接新增配置类即可,这样对代码的侵入性就会降低很多:

package com.wpbxin.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource; @Configuration
@ImportResource("classpath:dubbo-*.xml")
public class XMLConfig { }

二、自动配置(Auto-configuration)

  Spring Boot 的 auto-configuration(自动配置)会基于工程应用中添加的 jar 依赖进行自动配置。例如,如果 classpath 中有 HSQLDB,并且应用中没有手动配置数据库连接的 bean,Spring Boot 会自动配置一个默认的内存数据库。

  要开启使用 auto-configuration ,我们只需添加 @EnableAutoConfiguration注解 或者 @SpringBootApplication 注解中的一个到某一个 @Configuration 类中就可以。

小提示:@EnableAutoConfiguration注解 或者 @SpringBootApplication 注解,必须二选一,而且通常建议配置在主 @Configuration 类中。

1、逐步替换自动配置

  Auto-configuration 是非侵入式的,任何时候都可以使用自定义配置来替换默认的自动配置,比如自定义的 DataSource。

  可以通过 --debug 参数开启 debug 级别日志信息的记录,来查看具体加载了哪些自动配置项和相关的加载状态。

2、如何关闭特定的 Auto-configuration Classes

  如果发现有不需要的自动配置项,可以通过使用 @EnableAutoConfiguration 的 exclude 属性来关闭指定的自动配置,例如这里关闭 DataSource 配置:

import org.springframework.boot.autoconfigure.*;
import org.springframework.boot.autoconfigure.jdbc.*;
import org.springframework.context.annotation.*; @Configuration
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class MyConfiguration { }

  如果指定的类没有在 classpath 里,还可以使用注解的 excludeName 属性并指定全限定名。最后,还可以通过使用 spring.autoconfigure.exclude 来排除限定的自动配置列表类。

小提示:通过注解级别和使用属性级别都可以排除特定的自动配置项。

Spring Boot2(006):关于配置类(Configuration Classes)和配置(Configuration)的更多相关文章

  1. Spring Boot2 系列教程(二十一) | 自动配置原理

    微信公众号:一个优秀的废人.如有问题,请后台留言,反正我也不会听. 前言 这个月过去两天了,这篇文章才跟大家见面,最近比较累,大家见谅下.下班后闲着无聊看了下 SpringBoot 中的自动配置,把我 ...

  2. Spring源码解析 – @Configuration配置类及注解Bean的解析

    在分析Spring 容器创建过程时,我们知道容器默认会加载一些后置处理器PostPRocessor,以AnnotationConfigApplicationContext为例,在构造函数中初始化rea ...

  3. 【Spring】简述@Configuration配置类注册BeanDefinition到Spring容器的过程

    概述 本文以SpringBoot应用为基础,尝试分析基于注解@Configuration的配置类是如何向Spring容器注册BeanDefinition的过程 其中主要分析了 Configuratio ...

  4. 真懂Spring的@Configuration配置类?你可能自我感觉太良好

    当大潮退去,才知道谁在裸泳.关注公众号[BAT的乌托邦]开启专栏式学习,拒绝浅尝辄止.本文 https://www.yourbatman.cn 已收录,里面一并有Spring技术栈.MyBatis.中 ...

  5. spring5 源码深度解析----- 被面试官给虐懵了,竟然是因为我不懂@Configuration配置类及@Bean的原理

    @Configuration注解提供了全新的bean创建方式.最初spring通过xml配置文件初始化bean并完成依赖注入工作.从spring3.0开始,在spring framework模块中提供 ...

  6. 使用spring配置类代替xml配置文件注册bean类

    spring配置类,即在类上加@Configuration注解,使用这种配置类来注册bean,效果与xml文件是完全一样的,只是创建springIOC容器的方式不同: //通过xml文件创建sprin ...

  7. 你知道Spring是怎么解析配置类的吗?

    彻底读懂Spring(二)你知道Spring是怎么解析配置类的吗? 推荐阅读: Spring官网阅读系列 彻底读懂Spring(一)读源码,我们可以从第一行读起 Spring执行流程图如下: 如果图片 ...

  8. Spring boot 配置文件参数映射到配置类属性

    [参考文章]:SpringBoot之@EnableConfigurationProperties分析 [参考文章]:在Spring Boot中使用 @ConfigurationProperties 注 ...

  9. spring 配置 Java配置类装配bean

    https://www.cnblogs.com/chenbenbuyi/p/8457700.html 自动化装配的确有很大的便利性,但是却并不能适用在所有的应用场景,比如需要装配的组件类不是由自己的应 ...

  10. 【spring boot】7.静态资源和拦截器处理 以及继承WebMvcConfigurerAdapter类进行更多自定义配置

    开头是鸡蛋,后面全靠编!!! ========================================================  1.默认静态资源映射路径以及优先顺序 Spring B ...

随机推荐

  1. windows 创建软连接

    mklink /d D:\www\child.ivyoffline\common\components\policy D:\www\child.ivyoffline\appOA\protected\c ...

  2. Redis第一篇章 Hello Word!

    1.找到redis目录 2.在新建一个文件夹(myredis) 3.将redis.conf 进行复制到myredis 文件夹里面 4.启动redis redis-server /home/dc2-us ...

  3. 【剑指Offer面试编程题】题目1349:数字在排序数组中出现的次数--九度OJ

    题目描述: 统计一个数字在排序数组中出现的次数. 输入: 每个测试案例包括两行: 第一行有1个整数n,表示数组的大小.1<=n <= 10^6. 第二行有n个整数,表示数组元素,每个元素均 ...

  4. VOC2012数据集提取自己需要的类的图片和对应的xml标签

    根据需要修改路径和自己需要的类即可. import os import os.path import shutil fileDir_ann = r'/home/somnus/tttt/VOC2012/ ...

  5. 第1节 storm日志告警:1、 - 5、日志监控告警业务需求、代码、集群运行、总结

    如何解决短信或者邮件频繁发送的问题:每次发送的时候都先查询数据库记录,看一下有没有给这个人发送消息,上一次发送消息的时间是什么时候,如果发送时间间隔小于半个小时,就不要再发了 ============ ...

  6. [排错] VO对象和POJO对象的关系

    这或许是一个很蠢的笔记吧...... 这次项目中, 作为一个新人, 没少被这两个概念虐得死去活来的, 现在特别做一次记录, 关于它们二者之间在项目中的应用. 在这里呢, 就不再赘述 VO(view o ...

  7. windows远程桌面不显示本地磁盘

    \\tsclient\D 在资源管理器输入上面的内容就可以访问本地的D盘,但是前提是连接远程桌面的时候设置了可以访问本地D盘.

  8. Java服务端对Cookie的简单操作

    Java服务端对Cookie的简单操作 时间 2016-04-07 10:39:44 极客头条 原文  http://www.cuiyongzhi.com/index.php/post/15.html ...

  9. 前端学习笔记系列一:4 vue中@click.native

    .native - listen for a native event on the root element of component. 作用:[给组件绑定原生事件] 例子:如果使用router-l ...

  10. 算法:辗转相除法求最大公约数(C语言实现)

    辗转相除法,一种求最大公约数的算法 已知:A / B = C ······ R  (A.B.C.R皆是整数) 假设:D是A的余数,D也是B的余数,那么D就是A和B的公约数 D是A和B的约数,则A和B是 ...