芋道 Spring Boot 自动配置原理

本文深入探讨了Spring Boot的自动配置原理,包括自动配置类、条件注解、配置属性和内置Starter等内容。通过实例解析了如何创建内嵌的Tomcat服务器,展示了如何根据项目类型和依赖自动配置Bean。此外,还介绍了自定义Starter的实现过程,以创建和启动Java内置HttpServer。文章适合有一定Spring Boot基础的读者,旨在帮助读者理解Spring Boot如何从配置的繁琐中解放开发者。
摘要由CSDN通过智能技术生成

点击上方“芋道源码”,选择“设为星标

做积极的人,而不是积极废人!

源码精品专栏

 

摘要: 原创出处 http://www.iocoder.cn/Spring-Boot/autoconfigure/ 「芋道源码」欢迎转载,保留摘要,谢谢!

  • 1. 概述

  • 2. 自动配置类

  • 3. 条件注解

  • 4. 配置属性

  • 5. 内置 Starter

  • 6. 自定义 Starter

  • 666. 彩蛋


1. 概述

友情提示:因为本文是分享 Spring Boot 自动配置的原理,所以需要胖友有使用过 Spring Boot 的经验。如果还没使用过的胖友,不用慌,先跳转到《芋道 Spring Boot SpringMVC 入门》文章,将前两节阅读完,感受下 Spring Boot 的魅力。

Spring Boot 自动配置,顾名思义,是希望能够自动配置,将我们从配置的苦海中解脱出来。那么既然要自动配置,它需要解三个问题:

  • 满足什么样的条件

  • 创建哪些 Bean?

  • 创建的 Bean 的属性

我们来举个示例,对照下这三个问题。在我们引入 spring-boot-starter-web 依赖,会创建一个 8080 端口的内嵌 Tomcat,同时可以通过 application.yaml 配置文件中的 server.port 配置项自定义端口。那么这三个问题的答案如下:

友情提示:为了更易懂,这里的答案暂时是表象的,不绝对精准。

  • 满足什么样的条件?因为我们引入了 spring-boot-starter-web 依赖。

  • 创建哪些 Bean?创建了一个内嵌的 Tomcat Bean,并进行启动。

  • 创建的 Bean 的属性?通过 application.yaml 配置文件的 server.port 配置项,定义 Tomcat Bean 的启动端口属性,并且默认值为 8080。

壮着胆子,我们来看看 Spring Boot 提供的 EmbeddedWebServerFactoryCustomizerAutoConfiguration 类,负责创建内嵌的 Tomcat、Jetty 等等 Web 服务器的配置类。代码如下:

@Configuration // <1.1>
@ConditionalOnWebApplication // <2.1>
@EnableConfigurationProperties(ServerProperties.class) // <3.1>
public class  EmbeddedWebServerFactoryCustomizerAutoConfiguration {

	/**
	 * Nested configuration if Tomcat is being used.
	 */
	@Configuration // <1.2>
	@ConditionalOnClass({ Tomcat.class, UpgradeProtocol.class })
	public static class TomcatWebServerFactoryCustomizerConfiguration {

		@Bean
		public TomcatWebServerFactoryCustomizer tomcatWebServerFactoryCustomizer(
				Environment environment, ServerProperties serverProperties) {
			// <3.2>
			return new TomcatWebServerFactoryCustomizer(environment, serverProperties);
		}

	}

	/**
	 * Nested configuration if Jetty is being used.
	 */
	@Configuration // <1.3>
	@ConditionalOnClass({ Server.class, Loader.class, WebAppContext.class })
	public static class JettyWebServerFactoryCustomizerConfiguration {

		@Bean
		public JettyWebServerFactoryCustomizer jettyWebServerFactoryCustomizer(
				Environment environment, ServerProperties serverProperties) {
			 // <3.3>
			retur
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值