2018年使用springboot做了一些项目,但是发现自己仍然处于很low的水平,下定决心好好学学springBoot,第一篇文章写了WebFlux学习之旅1---函数式编程学习,考虑到之前学习的比较肤浅,打算放在SpringBoot学习之旅中慢慢完善,形成一个体系化的学习过程,OK,话不多说,记录下这几天的学习笔记:
为什么选择Springboot呢:
1.绝对的市场占有率:springboot是建立在spring框架上的,而spring框架的热门程度非常高
2.优秀的家族基因:springboot集成了spring的所有功能特性,为底层的spring framework快速搭建了应用,为高层的springCloud提供了基础设施
3.与时俱进的技术信仰:spring boot1.x,是建立在javaEE技术体系的,常见的springmvc属于servlet技术栈。数据层存储层面可以采用JDBC和JPA这样的规范操作。Spring boot2.x对于javaEE的必选项变成非必选项。spring阵营技术发展整整日上,而且最为显著的变化是编程模型的变化,其中以reactive为代表的编程范式,使用非阻塞+异步的方式,帮助程序充分的利用系统资源,提供应用伸缩性。为此Spring framework提供了一套完整的reactive技术栈,其中包括web层的webFlux,它是一种非阻塞的web框架,同时在底层的数据存储方面,spring已经提升到了相关的核心的设施,包括mongoDb、redis等数据,通过reactive实现非阻塞异步的编程方式。也是未来3-5年的技术趋势。
作者的学习思路:
从两个方面来学习springboot:核心技术与生态整合
核心技术:
组件自动装配
web应用
springboot应用
生态整合:
数据整合
容器整合
运维整合
思考:springBoot是如何基于Spring framework逐步走向自动装配
SpringApplication是这样掌控spring应用生命周期?
SpringBoot外部化配置与Spring Environment抽象之间是什么关系?
SpringWebMvc向Spring Reactive WebFlux过渡的真实价值和意义?
这些问题我会在后续的系列中说到,尤其是WebFlux会有一个专题
SpringBoot好学吗?
SpringBoot易学原因有下:
组件自动状态:规约大于配置,专注核心业务
外部化配置:一次构建、按需调配(端口等),到处运行
嵌入式容器:内置容器、无需部署,独立运行
SpringBootStarter:SpringBoot的核心,简化依赖、按需装配、自我包含
Production-Ready:一站式运维、生态无缝整合
SpringBoot难精:
组件自动装配:模式注解、@Enable模块、条件装配、加载机制
外部化配置:Environment抽象、生命抽泣、破坏性变更(1.0与2.0之间的部分不兼容)
嵌入式容器:Servlet Web容器、Reactive Web容器
SpringBoot Starter:依赖管理、装配条件、装配顺序
Production-Ready:健康检查、数据指标、@EndPoint管控
SpringBoot的核心特性--三大特性:
1.组件自动装配: Web MVC、Web Flux、JDBC等,组件指Web MVC WebFlux、JDBC、事务等组件,把springFramework中的手动配置变成自动配置。解决开发效率
1.1.如何激活自动装配呢?靠@EnableAutoConfiguration这个注解,其实我们的@SpringBootApplication已经包含了@EnableAutoConfiguration这个注解了,注解通常放在启动类的上面
2.1.配置/META-INF/spring.factories。首先这个东西是放在很多的jar包下面。META-INF是什么意思呢?META是元的意思,META-INF是元信息的目录。spring.factories是key-value形式的。factories里面放了很多自动装备的实现类,比如:# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
3.1.实现:XXXAutoConfiguration,可以参考2里面的东西
2.嵌入式Web容器:Tomcat、Jetty、Undertow。还有一种是WebFlux,它是基于Netty开发的web服务器。
3.生产准备特性:指标(CPU,内存)、健康检查(应用系统、数据库、磁盘、文件系统)、外部化配置(端口调整等等)