自我唠叨两分钟:SpringBoot其实已经使用了很长时间了,它实在太方便了,方便的让人把好多技术细节都已经忘却了...当然这是个好事情,因为开发的效率大大提高,业务发展极为迅速,你的业务能够在市场中就有可能占的先机,能够让流量呆在你这,那么从企业角度来说,就是个好事情;但是,对于开发者来说,在你不清楚里面的技术细节的实现情况下,那么终究是一个黑盒,一直这么敏捷开发,不见得是一个好事情。其实也是从这一个角度作为出发点思考,各种语言,框架等疯狂的更新迭代,我们可以一直赶得上吗?我认为还是应该清楚稍微本质的一些东西,比如:通信协议,操作系统等这些东西,当然完全搞明白感觉头发都不够掉的,但是应该知道是怎么回事,然后在借助于上层的高级语言,框架来开发应用,这样不断的补充自己,才可以长久立足。
SpringBoot其实就是对Spring进行了一层封装。对于很多的框架它都会提供一套默认的配置,你只需要在pom中引入starter,然后就可以使用了。之前在公司做技术分享的时候,讲述的springboot的启动分析,感觉没有讲好,虽然关键点也讲述了,但是感觉还是没有将一个清晰的脉络理清楚,感觉自己的语言表达也有点问题。 我认为比较重要的点:
- spi机制。全称service provider interface,服务提供发现机制,就比如:jdk中的sql包中Driver接口对应的mysql中提供的服务配置如下:
在dubbo中也有对应的spi机制,给出一个负载均衡的例子具体可以参考dubbo官网
在spring中也有对应的spi机制,下图是 springboot 默认引入的服务实现
-
springboot的事件处理机制-观察者模式。使用springboot,从它的角度来说,就是你要构建一个spring应用了,然后呢,它就会一个应用的启动以及运行的过程中在合适的时间点(准备,正在启动,已经启动等时刻)对这些事件的监听者进行通知,然后监听者进行相应的逻辑处理;
-
Condition条件注解的使用也是非常重要的一环,它也是一大堆(下图),具体的使用在后面的文章中进行补充;
-
内嵌web应用服务器:tomcat jetty undertow, 这样带来的优缺点以及不同的的容器之间的使用场景和性能分析后面在分析(先欠着);
-
spring容器本身的refresh过程,我理解,spring的ioc过程是最重要的,aop也是基于ioc的,ioc容器的建立过程所以极其重要,之前也看了有两遍吧,发现还是记得不是很清楚,就感觉这个东西还是要多看,每一次看都会有收获;
-
propreties/yml/yaml 配置,springboot对于配置文件的读取,存在读取的顺序,相当于有优先级,不过 一般情况下貌似不会在这注意太多;
-
actuator监控,可以对整个spring应用的资源使用,日志设置,健康状况,应用信息进行调控;metrics(待补充)
在使用的时候如果对那一块儿不太清楚的话,建议直接官网:点我直达,基本你想要的都有。好了回归本文主题,差点忘了本文主题了:springboot中的可拓展点,我们不处理spring本身可拓展点,那个我们基于ioc分析的时候在进行讲述。进入正题:感觉写不动了 就列一下几个点:
- SpringApplication 就可以在启动之前配置一些参数,比如:
- ApplicationContextInitializer
- ApplicationListener
- SpringApplicationRunListener
- ApplicationRunner
- CommandLineRunner springboot中的spi
主要的一张图: