springboot揭秘与实战源码分析-工作原理剖析

long77      2022-02-14     376

关键词:

文章目录

  1. 1. EnableAutoConfiguration 帮助我们做了什么
  2. 2. 配置参数类 – FreeMarkerProperties
  3. 3. 自动配置类 – FreeMarkerAutoConfiguration4. 扩展阅读
    1. 3.1. 核心注解
    2. 3.2. 注入 Bean

结合《Spring Boot 揭秘与实战 源码分析 - 开箱即用,内藏玄机》一文,我们再来深入的理解 Spring Boot 的工作原理。

在《Spring Boot 揭秘与实战 源码分析 - 开箱即用,内藏玄机》一文,我们了解到 Spring Boot 提供了很多开箱即用的依赖模块,开发者只要在 Maven 的 pom 文件中添加相关依赖后,Spring Boot 就会针对这个应用自动创建和注入需要的 Spring Bean 到上下文中。

这篇,我们以 FreeMarker 的自动配置为例,重点讲解工作原理与加载过程。因为 FreeMarker 相对而言比较简单,Spring Boot 源码中只有三个类,所以作为案例相对而言比较好理解。

技术分享

EnableAutoConfiguration 帮助我们做了什么

你还记得 @EnableAutoConfiguration 注解么?

我们先来回顾下。

  1. @RestController
  2. @EnableAutoConfiguration
  3. @ComponentScan(basePackages = { "com.lianggzone.springboot" })
  4. public class WebMain {
  5. public static void main(String[] args) throws Exception {
  6. SpringApplication.run(WebMain.class, args);
  7. }
  8. }

那么,现在我们剖析下 @EnableAutoConfiguration 的源码。

技术分享

这里,关键在于 @Import 注解导入的 EnableAutoConfigurationImportSelector 类中最为关键的是 getCandidateConfigurations 方法中通过 SpringFactoriesLoader.loadFactoryNames 扫描 spring.factories 文件。

技术分享

现在,我们在来看下 SpringFactoriesLoader 源码。

技术分享

突然,你是不是发现 spring.factories 文件是相当重要呢?对的,Spring Boot 通过扫描这个文件中的内容,判断有哪些自动配置。以 FreeMarker 为例,我们来看下它是如何配置的。

技术分享

所以,Spring Boot 通过扫描 spring.factories 文件中的 EnableAutoConfiguration 参数中有哪些自动配置并进行加载。

配置参数类 – FreeMarkerProperties

这里的配置参数,可以通过application.properties 中直接设置。我们发现,它的前缀必须是 spring.freemarker。

技术分享

自动配置类 – FreeMarkerAutoConfiguration

核心注解

技术分享

在《Spring Boot 揭秘与实战 源码分析 - 开箱即用,内藏玄机》一文,有提到 @ConditionalOnClass 参数中对应的类在 classpath 目录下存在时,才会去解析对应的配置类,否则不解析该注解修饰的配置类。

Spring Boot 内部提供了很多自动化配置的类,例如,RedisAutoConfiguration 、MongoRepositoriesAutoConfiguration 、ElasticsearchAutoConfiguration , 这些自动化配置的类会判断 classpath 中是否存在自己需要的那个类,如果存在则会自动配置相关的配置,否则就不会自动配置,因此,开发者在 Maven 的 pom 文件中添加相关依赖后,这些依赖就会下载很多 jar 包到 classpath 中,有了这些 lib 就会触发自动化配置,所以,我们就能很便捷地使用对于的模块功能了。

此外,还有一个主要的注解是 @EnableConfigurationProperties ,主要用来加载我们上面提到的配置参数类。

注入 Bean

技术分享

这个源码非常好理解,我主要想讲2个注解。

第一注解是,@ConditionalOnMissingBean(name = “freeMarkerViewResolver”),指定当容器没有指定Bean的情况下的处理。

第二注解是,@ConditionalOnProperty,指定的属性是否有指定的值的处理,换句话说,如果在application.properties 没有配置,默认为 true,即条件符合。

扩展阅读

(完)

 

技术分享


springboot实战与原理分析视频课程

1、SpringBoot概述与课程概要介绍2、Spring4快速入门3、Spring4扩展分析(一)4、Spring4扩展分析(二)5、SpringBoot快速入门6、SpringBoot配置分析(一)7、SpringBoot配置分析(二)8、SpringBoot自动配置9、SpringBoot@Enable*注解的工作原理10、Sp... 查看详情

springboot揭秘与实战附录-springboot公共配置

SpringBoot公共配置,配置application.properties/application.yml文件中。摘自:http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html#========================================= 查看详情

ck1949-springboot实战与原理分析视频课程

CK1949-SpringBoot实战与原理分析视频课程随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到程序开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教程... 查看详情

springboot揭秘与实战发布与部署-远程调试

文章目录1. 依赖2. 部署3. 调试4. 源代码设置远程调试,可以在正式环境上随时跟踪与调试生产故障。依赖在pom.xml中增加远程调试依赖。<plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>... 查看详情

springboot揭秘与实战数据存储篇-elasticsearch

...;版本须知2. 环境依赖3. 数据源3.1. 方案一使用SpringBoot默认配置3.2. 方案二手动创建4. 业务操作5. 总结4.1. 实体对象4.2. DAO相关4.3. Service相关4.4. Controller相关6. 源代码本文讲解SpringBo 查看详情

springboot揭秘与实战实用技术篇-freemarker模板引擎

...页面渲染2. 生成静态文件3. 扩展阅读4. 源代码SpringBoot提供了很多模板引擎的支持,例如FreeMarker、Thymeleaf。这篇,我们看下SpringBoot如何集成和使用FreeMarker。SpringBoot中使用FreeMarker模板非常简单方便。如果想要使用FreeMa... 查看详情

springboot揭秘与实战数据存储篇-声明式事务管理

文章目录1. 声明式事务2. SpringBoot默认集成事务3. 实战演练4. 源代码3.1. 实体对象3.2. DAO相关3.3. Service相关3.4. 测试,测试本文讲解SpringBoot如何使用声明式事务管理。声明式事务Spring支持声明式事务,... 查看详情

《elasticsearch源码解析与优化实战》第17章:shrink原理分析(代码片段)

文章目录一、简介1.1、准备源索引1.2、缩小索引三、Shrink的工作原理3.1、创建新索引3.2、创建硬链接3.2.1、为什么一定要硬链接,不使用软链接?3.2、硬链接过程源码分析关注我的公众号【宝哥大数据】一、简介官方文档:... 查看详情

《elasticsearch源码解析与优化实战》第17章:shrink原理分析(代码片段)

文章目录一、简介1.1、准备源索引1.2、缩小索引三、Shrink的工作原理3.1、创建新索引3.2、创建硬链接3.2.1、为什么一定要硬链接,不使用软链接?3.2、硬链接过程源码分析关注我的公众号【宝哥大数据】一、简介官方文档:... 查看详情

springboot揭秘与实战应用监控篇-自定义监控端点

...dpoint抽象类2. 创建端点配置类3. 运行4. 源代码SpringBoot提供的端点不能满足我们的业务需求时,我们可以自定义一个端点。本文,我将演示一个简单的自定义端点,用来查看服务器的当前时间,它将返回两个参数,一... 查看详情

springboot进阶:原理实战与面试题分析读后感

❤️作者主页:小虚竹❤️作者简介:大家好,我是小虚竹。Java领域优质创作者🏆,CSDN博客专家🏆,华为云享专家🏆,掘金年度人气作者🏆,阿里云专家博主🏆❤️技术活,该赏... 查看详情

springboot进阶:原理实战与面试题分析读后感

❤️作者主页:小虚竹❤️作者简介:大家好,我是小虚竹。Java领域优质创作者🏆,CSDN博客专家🏆,华为云享专家🏆,掘金年度人气作者🏆,阿里云专家博主🏆❤️技术活,该赏... 查看详情

springboot进阶:原理实战与面试题分析|文末送书5本

在当下的互联网应用中,业务体系日益复杂,业务功能也在不断地变化。以典型的电商类应用为例,其背后的业务功能复杂度以及快速迭代要求的开发速度,与5年前的同类业务系统相比,面临着诸多新的挑战... 查看详情

一起来造一个rxjava,揭秘rxjava的实现原理

...、兼容性、扩展性有关的代码剔除,留下核心代码带大家揭秘RxJava的实现原理。什么是响应式编程首先,我们需要明确 查看详情

2019工作总结(代码片段)

...ava服务至k8s接入100+个项目的配置至nacos升级60+个mvc项目至springboot框架配合下架40+服务器,k8s侧下架20+台200+服务日志全量接入ELK,并配置报警30+个新项目上线支持学习方面2019年基本上都是在学习k8s、docker、ELKgo开发全链路监控、... 查看详情

自动驾驶感知算法实战16——激光雷达点云处理原理与实战

专题:激光雷达点云处理原理与实战主要从激光雷达的工作原理开始,介绍点云数据分析方法,讲解点云相关处理操作,介绍激光点云感知综述,相关点云深度学习处理方法。最终,以自动驾驶点云感知为实例,分析点云感知,... 查看详情

springboot2从入门到入坟|web场景开发篇:超硬核两万四千多字,全网最详细源码分析之静态资源配置原理,不是你来砍我

目录一览写在前面静态资源配置原理`WebMvcAutoConfiguration`自动配置类的详细分析是否生效?给容器中配了什么?揭秘`WebMvcAutoConfigurationAdapter`配置类揭秘`EnableWebMvcConfiguration`配置类资源处理的默认规则禁用所有静态资源配置规则源... 查看详情

深入浅出spring原理及实战「源码调试分析」结合datasourceregister深入分析importbeandefinitionregistrar的源码运作流程

...那会让你感觉到生活的美好。注入案例代码如何通过实现SpringBoot框架带有的ImportBeanDefinitionRegistrar注册器,注入我们想要注册的bean对象实例。只需要采用@Import的注解进行注入对应的一类相关的bean对象。@Import( 查看详情