本篇课程分为概念和实战内容。代码私信: 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自动化配置相关推荐

  1. 【七】springboot整合redis(超详细)

    springboot篇章整体栏目: [一]springboot整合swagger(超详细 [二]springboot整合swagger(自定义)(超详细) [三]springboot整合token(超 ...

  2. 【超详细】SpringBoot与Shiro整合-权限管理实战实操(附源码地址)

    一.搭建SpringBoot开发环境 1. 安装好开发软件和Maven等 开发工具:Spring Tool Suite(TST) Maven :3.3.9 jdk:1.8 2. 创建springboo ...

  3. 超详细的springBoot学习教程,springboot学习看这篇就够了

    springBoot学习 https://docs.spring.io/spring-boot/docs/2.2.6.RELEASE/reference/html/index.html (官方文档) ...

  4. 超详细的springBoot学习笔记

    Spring Boot 1.Spring Boot简介 Spring诞生时是Java企业版(Java Enterprise Edition,JEE,也称J2EE)的 轻量级代替品.无需开发重量级的En ...

  5. 超详细的SpringBoot+Mybatis+Vue整合笔记

    这是我的第一篇博客.请多多指教! 开发工具 前端:WebStorm.后台:Eclipse Vue环境搭建 vue是一个JavaMVVM库,是一套用于构建用户界面的渐进式框架,是初创项目的首选前端框架. ...

  6. SpringBoot(二):详细讲解SpringBoot整合MyBatis

    IDEA版SpringBoot整合MyBatis 整合mybatis需要的jar包 <dependency><groupId>org.projectlombok</gro ...

  7. 手把手带你入门前端工程化——超详细教程(高级前端必备)

    本文将分成以下 7 个小节: 技术选型 统一规范 测试 部署 监控 性能优化 重构 部分小节提供了非常详细的实战教程,让大家动手实践. 另外我还写了一个前端工程化 demo 放在 github 上.这 ...

  8. SpringBoot结合MyBatis 【超详细】

    1.SpringBoot+老杜MyBatis 一.简单回顾一下MyBatis 二.快速入门 ​三.简易插入删除更改 四.查询 ①.按其中一个字段查询 ②.按所有字段进行查询 ​五.详解MyBatis核 ...

  9. 第一个SpringBoot入门级项目(超详细步骤)

    开发环境: MyEcplise2017+Maven+SpringBoot+Tomcat 8.5 ① 创建一个新的Maven项目:File-->New-->Others-->Maven ...

最新文章

  1. mybatis ResultMap
  2. python从控制台读取数据
  3. python培训班价格-Python培训班一般多少钱?学费多少?
  4. 使用 IIS Manager 对 Windows Azure 网站进行远程管理
  5. 截取小数点_五年级上册系列| 小数点位置变化名师微课+课本+学案,暑假预科,很香!...
  6. 前端学习(1535):单一页面的优势
  7. C++ :类占用空间计算方式
  8. ICCV 2019 VisDrone挑战赛冠军方案解读
  9. android:获取网络时间、文件路径,修改包名,发布release版本
  10. 分布式计算、统计学习与ADMM算法
  11. 【中级计量经济学】Lecture 1 计量经济学初步
  12. html5 打字机效果,逼真的js打字机效果插件
  13. 速来围观!看小伙是如何用python可视化各城市拥堵情况的
  14. java部门人员结构树
  15. VB→C++→C#→VB.NET,语言的共性和个性
  16. 如何选择一款好相机?
  17. 【Microsoft Azure 的1024种玩法】四十二. 通过Windows Admin Center快速创建Azure Virtual Machines
  18. AtCoder Beginner Contest 242 C~E 题解
  19. MAC下SecureCRT 8.0.4破解版远程连接工具的安装与配置
  20. 【工具】PDF阅读器工具推荐

热门文章

  1. Qt学习笔记-QSqlModel的事物操作
  2. Qt学习笔记-使用QStyleFactory::create()变换风格
  3. c++ 记忆化搜索_2010/12区间动态规划及记忆化搜索
  4. 在java中为什么_属性绑定到类型_方法绑定到对象_13. Java基础之类型信息(RTTI和反射)...
  5. 2字节取值范围_Java注解-元数据、注解分类、内置注解和自定义注解|乐字节
  6. 国内首家!腾讯云密钥管理系统通过密码应用验证,积极探索行业标准边界
  7. 时间复杂度为m+n,的一种模式匹配,适合子串不是很长的匹配
  8. 1-2:学习shell之导航文件系统
  9. 可重入函数与不可重入函数
  10. 对于一个十进制数A,将A转换为二进制数,然后按位逆序排列,再转换为十进制数(Java)