关键词:
文章目录
结合《Spring Boot 揭秘与实战 源码分析 - 开箱即用,内藏玄机》一文,我们再来深入的理解 Spring Boot 的工作原理。
在《Spring Boot 揭秘与实战 源码分析 - 开箱即用,内藏玄机》一文,我们了解到 Spring Boot 提供了很多开箱即用的依赖模块,开发者只要在 Maven 的 pom 文件中添加相关依赖后,Spring Boot 就会针对这个应用自动创建和注入需要的 Spring Bean 到上下文中。
这篇,我们以 FreeMarker 的自动配置为例,重点讲解工作原理与加载过程。因为 FreeMarker 相对而言比较简单,Spring Boot 源码中只有三个类,所以作为案例相对而言比较好理解。
EnableAutoConfiguration 帮助我们做了什么
你还记得 @EnableAutoConfiguration 注解么?
我们先来回顾下。
- @RestController
- @EnableAutoConfiguration
- @ComponentScan(basePackages = { "com.lianggzone.springboot" })
- public class WebMain {
- public static void main(String[] args) throws Exception {
- SpringApplication.run(WebMain.class, args);
- }
- }
那么,现在我们剖析下 @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( 查看详情