Spring Boot2(006):关于配置类(Configuration Classes)和配置(Configuration)
SpringBoot2 系列往期回顾:
- SpringBoot2(001):入门介绍、官网参考和博客汇总
- SpringBoot2(002):手动创建第1个 SpringBoot2 简单应用——“HelloWorld” web 工程
- SpringBoot2(003):简要回顾“HelloWorld” web 工程
- SpringBoot2(004):关于 Build Systems (构建系统)
- SpringBoot2(005):关于工程代码结构的建议
接下来这一篇主要是对 配置类(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)的更多相关文章
- Spring Boot2 系列教程(二十一) | 自动配置原理
微信公众号:一个优秀的废人.如有问题,请后台留言,反正我也不会听. 前言 这个月过去两天了,这篇文章才跟大家见面,最近比较累,大家见谅下.下班后闲着无聊看了下 SpringBoot 中的自动配置,把我 ...
- Spring源码解析 – @Configuration配置类及注解Bean的解析
在分析Spring 容器创建过程时,我们知道容器默认会加载一些后置处理器PostPRocessor,以AnnotationConfigApplicationContext为例,在构造函数中初始化rea ...
- 【Spring】简述@Configuration配置类注册BeanDefinition到Spring容器的过程
概述 本文以SpringBoot应用为基础,尝试分析基于注解@Configuration的配置类是如何向Spring容器注册BeanDefinition的过程 其中主要分析了 Configuratio ...
- 真懂Spring的@Configuration配置类?你可能自我感觉太良好
当大潮退去,才知道谁在裸泳.关注公众号[BAT的乌托邦]开启专栏式学习,拒绝浅尝辄止.本文 https://www.yourbatman.cn 已收录,里面一并有Spring技术栈.MyBatis.中 ...
- spring5 源码深度解析----- 被面试官给虐懵了,竟然是因为我不懂@Configuration配置类及@Bean的原理
@Configuration注解提供了全新的bean创建方式.最初spring通过xml配置文件初始化bean并完成依赖注入工作.从spring3.0开始,在spring framework模块中提供 ...
- 使用spring配置类代替xml配置文件注册bean类
spring配置类,即在类上加@Configuration注解,使用这种配置类来注册bean,效果与xml文件是完全一样的,只是创建springIOC容器的方式不同: //通过xml文件创建sprin ...
- 你知道Spring是怎么解析配置类的吗?
彻底读懂Spring(二)你知道Spring是怎么解析配置类的吗? 推荐阅读: Spring官网阅读系列 彻底读懂Spring(一)读源码,我们可以从第一行读起 Spring执行流程图如下: 如果图片 ...
- Spring boot 配置文件参数映射到配置类属性
[参考文章]:SpringBoot之@EnableConfigurationProperties分析 [参考文章]:在Spring Boot中使用 @ConfigurationProperties 注 ...
- spring 配置 Java配置类装配bean
https://www.cnblogs.com/chenbenbuyi/p/8457700.html 自动化装配的确有很大的便利性,但是却并不能适用在所有的应用场景,比如需要装配的组件类不是由自己的应 ...
- 【spring boot】7.静态资源和拦截器处理 以及继承WebMvcConfigurerAdapter类进行更多自定义配置
开头是鸡蛋,后面全靠编!!! ======================================================== 1.默认静态资源映射路径以及优先顺序 Spring B ...
随机推荐
- requests---requests封装请求类型
我们在做自动化的时候,肯定是代码越简洁越好,代码重复量越少越好,这里呢,我们可以通过把requests的请求类型都封装起来,这样编写用例的时候可以直接进行请求 requests方法封装 我们通常用的最 ...
- PyCharm破解安装方法
1.在3322下载站下好压缩包之后,直接点击安装文件“pycharm-professional-2018.1.exe”进行安装,默认点击“next”下一步进行操作2.选择文件所创建的位置.位置可以选择 ...
- Kubernetes 深入学习(一) —— 入门和集群安装部署
一.简介 1.Kubernetes 是什么 Kubernetes 是一个全新的基于容器技术的分布式架构解决方案,是 Google 开源的一个容器集群管理系统,Kubernetes 简称 K8S. Ku ...
- jmeter之JDBC请求遇到的问题
1. 时区设置问题 Cannot create PoolableConnectionFactory (The server time zone value '???��������??��??' is ...
- 使用 sp_attach_db 系统存储过程附加数据库时---转载
//附加数据库 sp_attach_db 当使用 sp_attach_db 系统存储过程附加数据库时. sp_attach_db:将数据库附加到服务器. 语法 sp_attach_db [ @dbna ...
- 一、java基础-数据类型_数据类型转化_字符编码_转义字符
1.Java 支持的8种基本数据类型: java的四种整数数据类型:byte 1 short 2 int4 long8 byte 8位带符号整数 -128到127之 ...
- Linux centos7日常运维——监控io性能、free内存命令、ps进程命令、查看网络状态、linux下抓包
一.监控io性能 Linux系统出现了性能问题,一般我们可以通过top.iostat.free.vmstat等命令来查看初步定位问题.其中iostat可以给我们提供丰富的IO状态数据. iostat ...
- BOM--window对象
BOM 的核心对象是window,它表示浏览器的一个实例.在浏览器中,window 对象有双重角色,它既是通过JavaScript 访问浏览器窗口的一个接口,又是ECMAScript 规定的Globa ...
- Http服务和JSP
需要先安装tomocat8.0,并且使用的IDEA 一个web项目 新建项目 写代码 // 新建一个class @WebServlet("/test") public class ...
- 解决modelsim破解在win10下无法生成license
显示没有找到mgls.dll,此时,这个教程能够帮助你. 1.右击搜索结果cmd,选择以管理员身份运行 2. 打开win64(进入安装目录的win64),也就是两个破解文件所在的路径,输入cd win ...