最近栈长面试了很多人,其中不乏说对 Spring Boot 很是熟悉的,而后当我问到一些 Spring Boot 核心功能和原理的时候,没人能说得上来,或者说不到点上,能够说一个问题就问趴下了!java
这是个人问题:面试
我看你上面写了熟悉 Spring Boot,那你能讲下为何咱们要用 Spring Boot 吗?spring
下面我列几个最多见的三个回答:微信
A:Spring Boot 最主要是不用 XML 配置,能够用 Java 来配置 bean,省去了许多配置文件。app
我又问:Spring 自己就能够用 Java 配置代替 XML 配置,和 Spring Boot 有什么关系呢?spring-boot
而后对方就吱吱唔唔了……微服务
B:Spring Boot 咱们用来作 Spring Cloud 微服务。源码分析
我又问:微服务和 Spring Boot 有什么关系?不用 Spring Boot 行不行?ui
而后对方就吱吱唔唔了……url
C:Spring Boot 能够打 jar 包部署,内部集成了Tomcat。
这个确实是 Spring Boot 的特点,可是我仍是以为没有答到关键点上。
而后我继续问,若是不考虑打 jar 包部署呢,而后就没而后了……
为何咱们要用 Spring Boot,显然上面三个求职者没有答到关键点上,Spring Boot 最重要的功能是:自动配置。
为何说是自动配置?
Spring Boot 的开启注解是:@SpringBootApplication,其实它就是由下面三个注解组成的:
上面三个注解,前面两个都是 Spring 自带的,和 Spring Boot 无关,因此说上面的回答的不是在点上。具体请看这篇文章:Spring Boot 最核心的 3 个注解详解。
因此说 Spring Boot 最最核心的就是这个 @EnableAutoConfiguration
注解了,它能根据类路径下的 jar 包和配置动态加载配置和注入bean。
举个例子,好比我在 lib 下放一个 druid 链接池的 jar 包,而后在 application.yml 文件配置 druid 相关的参数,Spring Boot 就可以自动配置全部咱们须要的东西,若是我把 jar 包拿掉或者把参数去掉,那 Spring Boot 就不会自动配置。
这样咱们就能把许多功能作成公共的自动配置的启动器(starters),其实 druid 链接池就是这么作的,它提供了针对 Spring Boot 的启动器:druid-spring-boot-starter。
有了这个自动配置的启动器,咱们就能很是简单的使用它,
先添加 jar 包依赖:
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.10</version> </dependency>
再添加相关参数:
spring.datasource.url= spring.datasource.username= spring.datasource.password= ……
若是是传统的项目,咱们要本身手动写一大堆的配置,并且还不灵活,有了这个启动器,咱们就能够作到简单集成。具体你们能够看 druid-spring-boot-starter 是怎么实现的,也能够参考以前写的文章:Spring Boot自动配置原理、实战。
因此,这才是 Spring Boot 的核心,这才是咱们为何使用 Spring Boot 的缘由。若是答不到这个关键点,那真没有掌握到 Spring Boot 的核心所在。
好了,今天的分享就到这里,关注Java技术栈微信公众号,在后台回复:boot,获取栈长整理的更多的 Spring Boot 教程,都是实战干货,如下仅为部分预览。
本文原创首发于微信公众号:Java技术栈(id:javastack),关注公众号在后台回复 "boot" 可获取更多 Spring Boot 教程,转载请原样保留本信息。