从事java语言开发的人员,spring是一个绕不开的话题。这里我就简述下spring的发展。语句尽量用最通俗,最浅显的话语表述,不完整处还请谅解,请自行查询补全。
spring的发展时间表
1.spring
spring最核心的两个概念,也可以说是思想,就是IOC和AOP,可以说是spring的两大基石。其中的IOC又可以说是spring大厦基石中的核心。
IOC(Inversion of Control,控制反转或者依赖注入):将原来需要代码中手动处理的对象之间的依赖关系交给了spring容器。(java语言编程的核心就是万物皆对象,你说这个有多重要)
AOP(Aspect Oriented Programming,面向切面编程):在不影响原有代码的情况下,在原有执行流程中织入用户想完成的逻辑。(随时可以横插一杠而对方无感知,你说这个有多爽)
可以说正是有了spring,java语言才能被普通开发者广泛接受,而spring也仿佛成了java的代名词。
这个时候spring还需要其他组件的辅助才能更好完成一个完整的项目,最经典的框架就是SSH,spring Struts2(Struts2和Struts差距很大) hibernate。经典的三层模型。
Struts2管理和web层的交互,spring则主要处理业务逻辑,hibernate主管与数据层的交互。从这个架构来看,当时项目分层的思想已经很成熟了。
2.springmvc
spring不是吃素的,岂能让其他势力与自己三分天下,这时候开始了大一统,springmvc应运而生。
这时候对开发者来说最繁琐的就是来自xml文件的各种配置,从后台与数据库的连接到与前端视图的制定,初学者往往不知所措,spring根据这些问题又提出了注解大于配置的思想,而后大量的注解应运而生。注解虽然简化了配置和简洁了代码,但是对初学者来说,变成了知其然不知其所以然,遇到bug往往根据线索也找不到问题源头,被弄得云里雾里。
3.springboot
现代社会是崇尚效率的,为了适应时代的发展,spring重磅推出了springboot。能在一分钟内生成最基础的项目工程,这得归功于springboot里有个很棒的思想,约定大约配置,相当于项目有了默认配置。理解接受了这个,你就可以全方位把自己项目中的配置交给spring来管理了,就像原来把对象和对象之间的依赖关系交给spring一样。
项目开始开发的三板斧:1.引入包 2.注解 3.配置。加入其它功能组件,步骤变得简单许多。
这时候比较经典的开发环境就变成了在idea下git maven springboot。
随着项目业务的扩大,原有的单体架构已经不能满足业务的发展需求,在原有spring的基础上,各种分布式中间件应运而生,dubbo是其中的典型代表。各种多个单体应用间的交互需要统一的管理,这个时候就有版本仲裁中心的概念,zookeeper就是其中最典型的代表。
4.springcloud
但spring不会容忍其他势力来瓜分自己的地盘,springcloud应运而生,所以springcloud就是spring一系列的工具集。
牛逼的语言定义标准,springcloud亦是如此。以上架构图纯粹画了个饼。由两大伟大的公司负责实现。
Netflix公司的springcloud(https://spring.io/projects/spring-cloud-netflix),包括Eureka、Hystrix、Ribbon、Feign、Zuul等核心组件。
- Eureka:服务治理组件,包括服务端的注册中心和客户端的服务发现机制;
- Ribbon:负载均衡的服务调用组件,具有多种负载均衡调用策略;
- Hystrix:服务容错组件,实现了断路器模式,为依赖服务的出错和延迟提供了容错能力;
- Feign:基于Ribbon和Hystrix的声明式服务调用组件;
- Zuul:API网关组件,对请求提供路由及过滤功能。
Alibaba公司的 springcloud Alibaba(https://spring.io/projects/spring-cloud-alibaba#overview)。
- Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
- Sentinel:把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
- RocketMQ:开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。
- Dubbo:在国内应用非常广泛的一款高性能 Java RPC 框架。
- Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。
- Arthas:开源的Java动态追踪工具,基于字节码增强技术,功能非常强大。
这两大公司把开发中的关键组件都实现了。
开发语言的流行壮大依靠组件的发展,而组件的发展类似于人类语言的发展历程。而其中java标准的制定就像文字的出现,虽然口音不同,但大家还是能根据书面语言相互沟通,而spring可能就是中文里的普通话,能一统java市场。