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 ...
随机推荐
- python基础day05
上节内容变量if else注释 # ''' msg ''' 3个引号 打印多行 ', "" 双单引号的意义是一样的 缩进 本节内容pycharm使用 集成开发环境(IDE,Inte ...
- vbs操作IE对象
Dim fso,filepath,i 'Dim ExcelBook,ExcelSheet,MyExcelBook,MyExcelSheet Dim ie Set ie=WScript.CreateOb ...
- 洛谷 P3320 [SDOI2015]寻宝游戏
因为寻宝路径是一个环,所以寻宝花费的最小时间与起点无关.宝应当按照所有宝藏所在位置的 dfs 序进行才能够使得花费的时间最短.设 \(dist_i\) 表示 \(i\) 到树根的最短距离,那么树上任意 ...
- No module named 'PyQt5.QtWebEngineWidgets' 解决方法
“No module named 'PyQt5.QtWebEngineWidgets”报错的原因是PyQt5版本过高,解决方法主要有两大类方法: [方法一] 指定安装5.10.1版本的pyqt5 pi ...
- 二 Mybatis架构&MybatisDao的两种开发方式(原始Dao,接口动态代理)
MyBatis架构图 三个对象: SqlSessionFactoryBuilder.SqlSessionFactory.SqlSession SqlSessionFactoryBuilder:主要用来 ...
- Android之系统自带的文字外观设置及实际显示效果图
android:textAppearance xml布局里面设置文字的外观: 如“android:textAppearance=“?android:attr/textAppearanceLargeI ...
- IDEA spring mvc整合mybatis
准备工作 IDEA 2019.3.1 MySql 8.0.17 Tomcat 7.0.9 开始步骤 一.创建一个项目,添加Web支持 点击菜单:File->NEW->Project 选择左 ...
- 关于dotnet跨平台 微信公众号
dotNET跨平台 <dotNET跨平台>是国内首个以.NET程序员.技术文化.新闻为主题的公众号,拥有超过6万读者.在这里你可以谈微软.NET,Mono的跨平台开发技术,也可以谈谈其他的 ...
- sklearn调用逻辑回归算法
1.逻辑回归算法即可以看做是回归算法,也可以看作是分类算法,通常用来解决分类问题,主要是二分类问题,对于多分类问题并不适合,也可以通过一定的技巧变形来间接解决. 2.决策边界是指不同分类结果之间的边界 ...
- 三 保存客户&分页查询&Spring解决延迟加载问题
保存客户 Struts2通过模型驱动拿到封装对象,调用业务层将对象传递到持久层,持久层调用Hibernate模版将对象持久化到数据库. 持久层代码实现: 分页查询: 创建PageBean实体类,里面有 ...