springboot thymeleaf 引入jquery_超详细实战:SpringBoot高级之autoconfigure自动化配置
本篇课程分为概念和实战内容。代码私信: 005获取。
通读全文大概需要五分钟
不知道用过SpringBoot的同学,有没有发现在SpringBoot的maven依赖中经常会有很多的starter之类的依赖,往往这些依赖的框架,在加入到pom之后,当应用启动时候就会自动的被应用整合起来。比如昨天我们的thymeleaf教程中,SpringBoot在整合thymeleaf的时候,只是引入了spring-boot-starter-thymeleaf依赖就可以直接使用了,类似的还有很多。
比如: 自动整合freemarker
自动整合mybatis
现在不懂这些都没关系,本节课小编就教大家如何使用自动化配置。
说到自动化配置这其实是SpringBoot的一个小特性。不知道有没有同学仔细研究过SpringBootApplication这个注解主要有什么作用。其实自动化配置的秘密就隐藏在这里。
跟着小编来找一下秘密到底在哪里。
秘密就是: EnableAutoConfiguration
这个类的含义就是自动在依赖中找到自动化配置类。为了更简单的给各位小伙伴说清楚。下面
小编举一个例子thymeleaf。我们看下thymeleaf是如何实现自动化配置的吧。thymeleaf的自动化类就是这个:ThymeleafAutoConfiguration
前面我们说了SpringBoot的自动化配置的秘密是EnableAutoConfiguration.。那么我们看ThymeleafAutoConfiguration和EnableAutoConfiguration到底有什么关系呢?
谜底大解开
SpringBoot项目启动类必须要被EnableAutoConfiguration标记,而之所以我们没有看到是因为,SpringBootApplication已经被EnableAutoConfiguration标记了。
那么SpringBoot会在他依赖的所有包中去查找一个叫spring.factories的文件,ThymeleafAutoConfiguration和EnableAutoConfiguration的关系就在spring.factories里面声明。我们打开
spring.factories文件发现EnableAutoConfiguration其实与很多的自动化配置做了绑定。当EnableAutoConfiguration被加载,其实与其绑定的这么多自动化配置都会选择的进行启动。
到这里我们就知道了为啥当引入了thymeleaf就会自动被整合到SpringBoot中了吧。如果只知道以上这些其实还是不够的。下面小编提出一个问题。
请思考:
SpringBoot中自动化配置会自动整合ThymeleafAutoConfiguration但是假如我们不引入thymeleaf它的实现类,那么自动整合时候就会报中NoSuchClassException异常。SpringBoot是如何解决呢?
我们看ThymeleafAutoConfiguration是如何实现的。
答案就在这些注解上面。
- @ConditionalOnClass : classpath中存在该类时起效
- @ConditionalOnMissingClass : classpath中不存在该类时起效
- @ConditionalOnBean : DI容器中存在该类型Bean时起效
- @ConditionalOnMissingBean : DI容器中不存在该类型Bean时起效
- @ConditionalOnSingleCandidate : DI容器中该类型Bean只有一个或@Primary的只有一个时起效
- @ConditionalOnExpression : SpEL表达式结果为true时
- @ConditionalOnProperty : 参数设置或者值一致时起效
- @ConditionalOnResource : 指定的文件存在时起效
- @ConditionalOnJndi : 指定的JNDI存在时起效
- @ConditionalOnJava : 指定的Java版本存在时起效
- @ConditionalOnWebApplication : Web应用环境下起效
- @ConditionalOnNotWebApplication : 非Web应用环境下起效
SpringBoot如何来判断是否启动自动化配置,防止报错呢? 就是通过上面的条件注解来实现。只要满足条件的配置类,才会被整合进去。
实现一个自动化配置项目实战?
我们以github上一个项目为例
使用方法.(和SpringCloud中Hystrix的使用方法类似,当getUserName出现报错之后,就返回其指定的备用方法)
该项目可以自动化配置.
我们看他是如何实现自动化配置的吧。
Turnoff的配合类就下面这么简单。
只用在META-INF目录中创建一个spring.factories就可以实现。是不是很简单。
到这里本篇内容就讲完了,相信各位看官已经明白了吧。
获取本课程代码请关注头条号: 软件编程指南 ,私信: 005
更多了解可以点击小编博客: https://blog.springlearn.cn/posts/4135/
springboot thymeleaf 引入jquery_超详细实战:SpringBoot高级之autoconfigure自动化配置相关推荐
- 【七】springboot整合redis(超详细)
springboot篇章整体栏目: [一]springboot整合swagger(超详细 [二]springboot整合swagger(自定义)(超详细) [三]springboot整合token(超 ...
- 【超详细】SpringBoot与Shiro整合-权限管理实战实操(附源码地址)
一.搭建SpringBoot开发环境 1. 安装好开发软件和Maven等 开发工具:Spring Tool Suite(TST) Maven :3.3.9 jdk:1.8 2. 创建springboo ...
- 超详细的springBoot学习教程,springboot学习看这篇就够了
springBoot学习 https://docs.spring.io/spring-boot/docs/2.2.6.RELEASE/reference/html/index.html (官方文档) ...
- 超详细的springBoot学习笔记
Spring Boot 1.Spring Boot简介 Spring诞生时是Java企业版(Java Enterprise Edition,JEE,也称J2EE)的 轻量级代替品.无需开发重量级的En ...
- 超详细的SpringBoot+Mybatis+Vue整合笔记
这是我的第一篇博客.请多多指教! 开发工具 前端:WebStorm.后台:Eclipse Vue环境搭建 vue是一个JavaMVVM库,是一套用于构建用户界面的渐进式框架,是初创项目的首选前端框架. ...
- SpringBoot(二):详细讲解SpringBoot整合MyBatis
IDEA版SpringBoot整合MyBatis 整合mybatis需要的jar包 <dependency><groupId>org.projectlombok</gro ...
- 手把手带你入门前端工程化——超详细教程(高级前端必备)
本文将分成以下 7 个小节: 技术选型 统一规范 测试 部署 监控 性能优化 重构 部分小节提供了非常详细的实战教程,让大家动手实践. 另外我还写了一个前端工程化 demo 放在 github 上.这 ...
- SpringBoot结合MyBatis 【超详细】
1.SpringBoot+老杜MyBatis 一.简单回顾一下MyBatis 二.快速入门 三.简易插入删除更改 四.查询 ①.按其中一个字段查询 ②.按所有字段进行查询 五.详解MyBatis核 ...
- 第一个SpringBoot入门级项目(超详细步骤)
开发环境: MyEcplise2017+Maven+SpringBoot+Tomcat 8.5 ① 创建一个新的Maven项目:File-->New-->Others-->Maven ...
最新文章
- mybatis ResultMap
- python从控制台读取数据
- python培训班价格-Python培训班一般多少钱?学费多少?
- 使用 IIS Manager 对 Windows Azure 网站进行远程管理
- 截取小数点_五年级上册系列| 小数点位置变化名师微课+课本+学案,暑假预科,很香!...
- 前端学习(1535):单一页面的优势
- C++ :类占用空间计算方式
- ICCV 2019 VisDrone挑战赛冠军方案解读
- android:获取网络时间、文件路径,修改包名,发布release版本
- 分布式计算、统计学习与ADMM算法
- 【中级计量经济学】Lecture 1 计量经济学初步
- html5 打字机效果,逼真的js打字机效果插件
- 速来围观!看小伙是如何用python可视化各城市拥堵情况的
- java部门人员结构树
- VB→C++→C#→VB.NET,语言的共性和个性
- 如何选择一款好相机?
- 【Microsoft Azure 的1024种玩法】四十二. 通过Windows Admin Center快速创建Azure Virtual Machines
- AtCoder Beginner Contest 242 C~E 题解
- MAC下SecureCRT 8.0.4破解版远程连接工具的安装与配置
- 【工具】PDF阅读器工具推荐
热门文章
- Qt学习笔记-QSqlModel的事物操作
- Qt学习笔记-使用QStyleFactory::create()变换风格
- c++ 记忆化搜索_2010/12区间动态规划及记忆化搜索
- 在java中为什么_属性绑定到类型_方法绑定到对象_13. Java基础之类型信息(RTTI和反射)...
- 2字节取值范围_Java注解-元数据、注解分类、内置注解和自定义注解|乐字节
- 国内首家!腾讯云密钥管理系统通过密码应用验证,积极探索行业标准边界
- 时间复杂度为m+n,的一种模式匹配,适合子串不是很长的匹配
- 1-2:学习shell之导航文件系统
- 可重入函数与不可重入函数
- 对于一个十进制数A,将A转换为二进制数,然后按位逆序排列,再转换为十进制数(Java)