文档章节

SpringBoot自动配置小记

大_于
 大_于
发布于 06/21 21:01
字数 797
阅读 27
收藏 0
点赞 0
评论 0

    spring-boot项目的特色就在于它的自动配置,自动配置就是开箱即用的本源。

    不过支持一个子项目的自动配置,往往比较复杂,无论是sping自己的项目,还是第三方的,都是如此。刚接触会有点乱乱的感觉。简单记录一下:

    首先,要用注解引入一个功能,这个注解的命名格式往往是 Enable + 功能名。比如,EnableAuthorizationServer,要在基于spring框架的项目中引入OAuth2的授权服务器功能,需要在@Configuration注解的类上加入@EnableAuthorizationServer。

    第二步,跟着Enable注解引入的往往是需要真正被配置的的类,这些类往往是功能名 + Configuration,比如@EnableAuthorizationServer引入了AuthorizationServerEndpointsConfiguration和AuthorizationServerSecurityConfiguration,这两个类才是配置的核心所在。

    第三步:与xxxConfiguration相对应的是xxxConfigurer,这些Configurer将是暴露出来给使用框架的开发者,用它来自定义Configuration中的对象或参数进行自定义。然后Configuration类的做法往往是这样的,使用spring的DI机制,将BeanFactory容器中所有的xxxConfigure注入到一个队列中,然后将队列中的所有xxxConfigure的配置方法回调一下,达到最终配置的目的。 比如:

	@Autowired
	private List<AuthorizationServerConfigurer> configurers = Collections.emptyList();

当上面自动注入了之后,将做下面的事情:

	@PostConstruct
	public void init() {
		for (AuthorizationServerConfigurer configurer : configurers) {
			try {
				configurer.configure(endpoints);
			} catch (Exception e) {
				throw new IllegalStateException("Cannot configure enpdoints", e);
			}
		}
		endpoints.setClientDetailsService(clientDetailsService);
	}

    关于这一步,记住真正被需要的完成最终系统功能的对象都在xxxConfiguration中了。

第四步:为了方便xxxCofigure对某些特定类进行配置,常常会引入xxxBuilder。看看这Builder源码或许会发现代码绕来绕去的,但是Builder目的明确,就是构建某个类的对象中的属性值,记住这一点就可以了。另外对于xxxConfigure也需要记住一点,就是所有需要给配置的参数或者参数对象,都会列在xxxConfigure中,如果这里面没有你需要配置的参数,那就要想点其它方法了,比如用spring自带的代理机制。

第五步:到这里还没有自动配置什么事儿,其实自动配置也就是众多Configure中的一个,只不过它设定了所有需要参数的默认值。也因为这个原因,自动配置可以被其它配置改写或者顶替掉自动配置。自动配置常常被命名为xxxAutoConfiguration,比如OAuth2AutoConfiguration。

    综上所述,spring-boot项目中,其实是以@Enablexxx注解驱动某个功能,然后以xxxAutoConfiguration来填充默认值,如此就能保证这个功能以最基本的要求运行起来。而改变其中的默认行为,则需要通过定义xxxConfigure来完成。

 

 

© 著作权归作者所有

共有 人打赏支持
大_于
粉丝 3
博文 34
码字总数 12800
作品 0
南京
技术主管
恒宇少年/spring-boot-chapter

简书整套文档以及源码解析 专题 专题名称 专题描述 001 Spring Boot 核心技术 讲解SpringBoot一些企业级层面的核心组件 002 Spring Cloud 核心技术 对Spring Cloud核心技术全面讲解 003 Quer...

恒宇少年
04/19
0
0
springboot 是如何帮我们省去web.xml配置的

概述 最开始使用原生的springmvc时,总是免不了有如下xml配置 但是,切换到springboot之后,web.xml之类的繁琐的配置基本上都不见了。出于好奇研究了下springboot究竟帮我们做了什么,我们可...

端吉
06/23
0
0
Spring Boot HelloWorld 解析

开发环境 开发工具:IDEA 2017.2.2 链接: https://pan.baidu.com/s/1qxZLZtBR-Xr7JVkgmhZWzw 密码: wsqp 激活教程:http://idea.lanyus.com/ Spring Boot:2.0.3.RELEASE 参考文档:https://d......

爱编程的帅小伙
07/02
0
0
springboot 开发入门,及问题汇总

1 . springboot简单介绍(http://projects.spring.io/spring-boot/) 现在的web项目几乎都会用到spring框架,而要使用spring难免需要配置大量的xml配置文件,而springboot的出现解 决了这一问...

崔江昆
2015/03/18
0
30
第一章:Maven环境下如何配置QueryDSL环境

QueryDSL是一个通用的查询框架,框架的核心原则是创建安全类型的查询,开始QueryDSL仅支持Hibernate(HQL),在不断开源人士加入QueryDSL团队后,陆续发布了针对JPA,JDO,JDBC,Lucene,Hib...

恒宇少年
2017/07/01
0
0
10分钟入门SpringBoot

SpringBoot是基于spring框架衍生的一种新的微服务框架,如果对Spring有一定了解的同学肯定知道在Spring中需要配置各种xml文件完成bean的注册操作,随着服务越来越多,配置就变得越来越复杂,...

jwfy
06/14
0
0
SpringBoot学习之基础篇

在前面的博文中,已经演示过springboot与Mybatis集成的实例,本篇再来探讨一下SpringBoot的基础。 一。关于SpringBoot   SpringBoot可以基于Spring轻松创建可以“运行”的、独立的、生产级...

java~nick
2017/10/31
0
0
第一个SpringBoot示例

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这...

zq木偶人
昨天
0
0
SpringBoot自定义starter

SpringBoot 提供了众多的starter简化我们开发,为了更好地使用这些starter,了解其原理是很重要的,今天就来自定义一个starter。 1,如何自定义 ①,我们首先要有一个意识,springboot自己适...

暗中观察
05/21
0
0
SpringBoot | 第一章:第一个SpringBoot应用

SpringBoot | 第一章:第一个SpringBoot应用 springboot简单介绍 概述 随着动态语言的流行(Ruby、Groovy、Scala、Node.js),Java的开发显得格外的笨重:繁多的配置、低下的开发效率、复杂的...

oKong
07/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring Cloud Gateway 接口文档聚合实现

在微服务架构下,通常每个微服务都会使用Swagger来管理我们的接口文档,当微服务越来越多,接口查找管理无形中要浪费我们不少时间,毕竟懒是程序员的美德。 由于swagger2暂时不支持webflux 走...

冷冷gg
10分钟前
6
0
流利阅读笔记30-20180719待学习

1.今日导读 2.带着问题听讲解 3.新闻正文(中英文对照) 4.重点词汇 5.拓展内容

aibinxiao
12分钟前
1
0
OSChina 周五乱弹 —— 我们是食物链的最底层

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @温家成 :分享谢安琪的单曲《姿色份子》 《姿色份子》- 谢安琪 手机党少年们想听歌,请使劲儿戳(这里) @贪吃飒:最近p2p怎么了、半个月爆了...

小小编辑
25分钟前
5
1
Android Studio 3.0 之后打包apk出现应用未安装问题

1、废话 出现这个问题的原因,并不是只有一个,而是有多个原因,不懂的估计会被搞得一头雾水,下面我列举的是我遇到的几种问题和网友遇到的几种问题,但不一定是全部,也有可能有些莫名其妙的...

她叫我小渝
45分钟前
0
0
前端基础

1. get请求传参长度的误区 误区:我们经常说get请求参数的大小存在限制,而post请求的参数大小是无限制的。 实际上HTTP 协议从未规定 GET/POST 的请求长度限制是多少。对get请求参数的限制是...

wenxingjun
今天
0
0
拦截SQLSERVER的SSL加密通道替换传输过程中的用户名密码实现运维审计(一)

工作准备 •一台SQLSERVER 2005/SQLSERVER 2008服务 •SQLSERVER jdbc驱动程序 •Java开发环境eclipse + jdk1.8 •java反编译工具JD-Core 反编译JDBC分析SQLSERVER客户端与服务器通信原理 SQ...

紅顏為君笑
今天
9
0
jQuery零基础入门——(六)修改DOM结构

《jQuery零基础入门》系列博文是在廖雪峰老师的博文基础上,可能补充了个人的理解和日常遇到的点,用我的理解表述出来,主干出处来自廖雪峰老师的技术分享。 在《零基础入门JavaScript》的时...

JandenMa
今天
0
0
linux mint 1.9 qq 安装

转: https://www.jianshu.com/p/cdc3d03c144d 1. 下载 qq 轻聊版,可在百度搜索后下载 QQ7.9Light.exe 2. 去wine的官网(https://wiki.winehq.org/Ubuntu) 安装 wine . 提醒网页可以切换成中...

Canaan_
今天
0
0
PHP后台运行命令并管理运行程序

php后台运行命令并管理后台运行程序 class ProcessModel{ private $pid; private $command; private $resultToFile = ''; public function __construct($cl=false){......

colin_86
今天
1
0
数据结构与算法4

在此程序中,HighArray类中的find()方法用数据项的值作为参数传递,它的返回值决定是否找到此数据项。 insert()方法向数组下一个空位置放置一个新的数据项。一个名为nElems的字段跟踪记录着...

沉迷于编程的小菜菜
今天
1
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部