了解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的字样。Positive matches
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仓库 立即下载
相关文章
- Apache Shiro In Easy Steps With Spring Boot(二)-Authenticator,Authorizer,Subject
- Spring Boot拦截器配置拦截登陆「建议收藏」
- 利用 Spring Boot Admin 对 Spring Boot 应用监控以及配置认证
- spring boot 之 profile 配置
- Spring Boot配置WebMvc
- spring boot activiti7常见问题「建议收藏」
- Spring Boot基础配置之属性配置
- Spring Boot + Elasticsearch 实现索引的日常维护
- 软件测试|Spring boot 之 RestTemplate
- ldap客户端 spring boot ldap
- Spring Boot执行延时任务-DelayQueue的使用
- Spring Boot 3 升级 踩坑笔记
- 实战 | 使用Spring Boot + Elasticsearch + Logstash 实现图书查询检索服务
- 实战!3分钟搞定Spring Boot 多环境配置
- Spring Boot 2.6之后,动态权限控制终于可以用起来了!
- Spring Boot 2.x基础教程:使用Elastic Job的分片配置
- Spring Boot 2.x基础教程:配置元数据的应用
- Spring Boot的安全配置(三)
- Spring Boot的性能优化(一)
- 一文搞懂阿里云服务器部署Redis并整合Spring Boot
- spring的AOP(五)—-Spring AOP 编程(AspectJ )详解编程语言
- Spring Boot(六): Favicon配置详解编程语言
- Spring Boot读取配置的 5 种方式详解编程语言
- Spring Boot 配置随机数技巧详解编程语言
- Spring boot 定时器详解编程语言
- Spring Boot——Linux 启动方式详解编程语言