了解Spring Boot的自动配置
Spring Boot的自动配置给开发者带来了很大的便利,当开发人员在pom文件中添加starter依赖后,maven或者gradle会自动下载很多jar包到classpath中。当Spring Boot检测到特定类的存在,就会针对这个应用做一定的配置,自动创建和织入需要的spring bean到程序上下文中。
在之前的文章中,我们只是在pom文件中增加各种starter的依赖,例如:spring-boot-starter-data-jpa, spring-boot-starter-web, spring-boot-starter-data-test等等。接下来将在之前的工程的基础上,观察在程序的引导启动过程中,Spring Boot通过自动配置机制帮我们做了哪些工作。
How Do Spring Boot启动时将自动配置的信息通过DEBUG级别的日志打印到控制台。可以通过设置环境变量(DEBUG)或者程序属性(--debug)设置程序的日志输出级别。 在项目目录下运行DEBUG=true mvn spring-boot:run启动应用程序; 在后台可以看到DEBUG级别的日志输出,在启动日志的最后,可以看到类似AUTO-CONFIGURATION REPORT的字样。![1240](http://upload-images.jianshu.io/upload_images/44770-03cffed273860dcd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
Positive matches
![1240](http://upload-images.jianshu.io/upload_images/44770-d2ce9037ae484207.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
Negative matches
可以看到,后台输出的自动配置信息特别多,好几页屏幕,没办法一一分析,在这里选择一个postive match和negative match进行分析。
Spring Boot通过配置信息指出:特定配置项被选中的原因、列出匹配到对应类的配置项(positive match)、不包括某个配置项的原因(negative match)。现在以DataSourceAutoConfiguration举例说明:
@ConditionalOnClass 表示对应的类在classpath目录下存在时,才会去解析对应的配置文件,对于DataSourceAutoConfiguration来说就是指:只有javax.sql.DataSource和org.springframwork.jdbc.datasource.embedded.EmbeddedDatabaseType类都能存在时,就会配置对应的数据库资源。 @ConditionalOnMisssingClass表示对应的类在classpath目录下找不到。 OnClassCondition用于表示匹配的类型(postive or negative)
OnClassCondition是最普遍的浏览探测条件,除此之外,Spring Boot也使用别的探测条件,如:OnBeanCondition用于检测指定bean实例存在与否、OnPropertyCondition用于检查指定属性是否存在等等。
符合negative match代表一些配置类(xxxConfiguration之类的),它们虽然存在于classpath目录,但是修饰它们的注解中依赖的其他类不存在。导入如果在pom文件中导入spring-boot-autoconfigure包,则GsonAutoConfiguration就会出现在classpath目录下,但是该配置类被@ConditionalOnClass(Gson.class)修饰,而com.google.gson.Gson类不在classpath目录。
@Configuration @ConditionalOnClass({Gson.class}) public class GsonAutoConfiguration { public GsonAutoConfiguration() { @Bean @ConditionalOnMissingBean public Gson gson() { return new Gson(); }@ConditionalOnClass:该注解的参数对应的类必须存在,否则不解析该注解修饰的配置类; @ConditionalOnMissingBean:该注解表示,如果存在它修饰的类的bean,则不需要再创建这个bean;可以给该注解传入参数例如@ConditionOnMissingBean(name = "example"),这个表示如果name为“example”的bean存在,这该注解修饰的代码块不执行。 Spring Boot实战:自动配置原理分析
SpringBoot | 是如何实现自动配置的? 这个月过去两天了,这篇文章才跟大家见面,最近比较累,大家见谅下。下班后闲着无聊看了下 SpringBoot 中的自动配置,把我的理解跟大家说下。
springBoot自动配置原理 springBoot是现在JAVA开发领域最优秀也是应用最广泛的框架之一,深受国内广大程序员喜爱,也是目前程序员的标配技术栈了,面试过程中经常会问道springBoot相关的技术问题,比如说我们今天探讨的自动配置原理,这是springBoot中一个很核心的技术,因为springBoot的理念是约定大于配置,在springBoot的整个框架中大量使用自动配置的原理,让我们来一块揭开神秘面纱。
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载
相关文章
- spring boot之端口设置和contextpath的配置[通俗易懂]
- Spring 全家桶之 Spring Boot 2.6.4(四)- Data Access(Part C JPA)
- Spring 全家桶之 Spring Boot 2.6.4(五)- WebMvcAutoConfiguration(Part D)
- Spring Boot 集成MyBatis[通俗易懂]
- Spring Boot拦截器配置拦截登陆「建议收藏」
- Spring Boot配置WebMvc
- 用Spring Boot搞了个医院项目,附源码!
- Spring Boot、Spring Cloud 自定义配置文件(如何整合配置中心)
- spring boot的基本配置——spring boot的web开发——Thymeleaf模板引擎———通过HttpSession session的session.setAttribute返回数据给
- 不会前端没事,用GWT Boot和Spring Boot构建Web程序
- Spring boot串口通信,windows、linux,docker环境配置说明
- [Redis]Spring Boot中Redis Template集群配置
- Spring Boot Actuator集成demo
- 实战!3分钟搞定Spring Boot 多环境配置
- 在云服务器上搭建个人版chatGPT及后端Spring Boot集成chat GPT教程
- Spring Boot 2.x基础教程:使用Elastic Job的分片配置
- Spring Boot的核心注解和配置(二)
- Spring Boot的安全配置(三)
- Spring Boot 中 @EnableXXX 注解的驱动逻辑
- Spring Boot核心配置详解编程语言
- Spring Boot Starters启动器详解编程语言
- Spring Boot Tomcat配置详解编程语言
- Spring Boot 集成 Mybatis 实现双数据源详解编程语言
- Spring Boot(七):springboot+mybatis多数据源最简解决方案详解编程语言
- spring boot 配置随机数那些小技详解编程语言