在Java项目开发过程中,我们常常会使用开源的基础框架再引入一些中间件来快速的搭建一个项目,然后进行二次开发。先说中间件,有我们比较常用的RabbitMQ/RocketMQ/Kafka、Redis、Dubbo、Zookeeper等等。再说核心基础框架,现在比较通用的是Spring、SpringBoot和SpringCloud。那么今天我们按照Spring、SpringBoot、SpringCloud这个顺序来认识一下Spring家族以及他们各自扮演的角色。
一、Spring框架(Spring Framework)
Spring是一个轻量级的容器框架。这个框架最初是为了解决EJB开发笨重臃肿的问题,Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情,为J2EE提供了另一种简单又实用的解决方案,Spring被认为是一个低成本、安全、灵活的框架。Spring提高了编码效率并减少了整体开发时间,因为它是轻量级的,有效地使用系统资源并提供了出色的开发体验。Spring消除了繁琐的配置工作,让开发人员可以专注于创建有效的业务逻辑。Spring负责基础设施,以便开发人员可以专注于应用程序。它的主要特点就是面向切面(AOP)和控制反转(IOC)。
补充说明:EJB属于分布式开发,但是目前市场中小型企业都是非分布式项目,所以为了应市场要求,springBoot横空出世,恰恰解决了中小企业的问题,springBoot诞生就是市场的应召的微服务。举个例子,EJB就是导弹,专门设计为打高空飞机。但是现在发现飞机不多。于是将它用来对付步兵,这个实在太糟糕了。这个时候有人发明了狙击步枪(Spring),发现对付步兵使用阻击步枪太好用了。这里面导弹和阻击步枪都可以实现打步兵的目的,但使用导弹代价太高。狙击枪才是最好的选择。
搭建纯Spring项目Demo步骤:
1.使用idea构造一个Spring项目,命名为SpringDemo,会自动加载jar包,在SpringDemo项目的lib目录下;
2.在src目录下建立两级目录com.cn,并在此目录下编写一个接口Api,和两个接口实现类ApiImplOne,ApiImplTwo;
3.在src目录下编写Spring的配置文件applicationContext.xml(这里不考虑数据库的配置等);
4.编写测试类TestDemo,运行,查看控制台打印结果;
二、SpringBoot框架
SpringBoot是Spring的升级版,Spring Boot 基本上是 Spring 框架的扩展,它消除了设置 Spring 应用程序所需的 XML配置,为更快,更高效的开发生态系统铺平了道路。可以理解为Spring Boot就是一个基于Spring的套件,它帮我们预组装了Spring的一系列组件,以便以尽可能少的代码和配置来开发基于Spring的Java应用程序。
举个例子说明:
如果我们想组装一辆汽车,我们需要发动机、轮胎、底盘、外壳、座椅、内饰等各种部件,然后把它们装配起来。Spring就相当于提供了一系列这样的部件,但是要装好汽车上路,还需要我们自己动手。而Spring Boot则相当于已经帮我们预装好了一辆可以上路的汽车,如果有特殊的要求,例如把发动机从普通款换成涡轮增压款,可以通过修改配置或编写少量代码完成。
基于SpringBoot框架,我们可以集成其他的技术,比如Redis、RabbitMq\RockerMQ\Kafka、Zookeeper、Dubbo、quartz、logback、OSS\OBS、jenkins、ELK 等,这些是需要额外的编写代码或者配置集成的。
三、SpringCloud框架
SpringCloud是基于SpringBoot来实现的微服务架构开发组件,Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
springCloud关注于全局的微服务整合和管理,将多个springBoot单体微服务进行整合以及管理。
四、SpringBoot框架和SpringCloud框架比较
市场上使用Spring底层的基本是使用SpringBoot或者SpringCloud,他们均集成了spring,那么接下来我们就重点说明一下SpringBoot和SpringCloud的区别。
1、SpringBoot和SpringCloud的区别
SpringBoot只是一个快速开发框架,使用注解简化了xml配置,内置了Servlet容器,以Java应用程序进行执行。它提供了一个默认配置,从而简化配置过程;
SpringCloud是基于spring boot的一系列框架的集合,包括 eureka、ribbon、 feign、 zuul 、hystrix等。它为了给微服务提供一个综合管理框架。
2、既然SpringCloud那么强大,为什么还继续使用SpringBoot
使用场景不同。SpringBoot用于关联性不强单个微服务。当服务拆分多个微服务协作时为提高服务间的相互协作的可靠性高性能就要上SpringCloud。
项目规模会决定你使用什么样的框架,比如一个小型的后台管理系统,就比较适合使用SpringBoot,部署起来也比较简单,在不考虑高并发的情形下使用Springboot可以快速进行开发,后续也可以通过nginx/haproxy负载等来提高性能,对硬件的需求也相对较小。如果使用SpringCloud,相对比较复杂,并且投入的硬件成本较高。
额外备注:微服务领域已经出了SpringCloud,为何还要学习SpringCloud Alibaba?
一个很重要的原因就是SpringCloud中一些组件闭源了,不再维护,如果在生产环境出现了问题,官方不再免费维护了。比如:注册中心Eureka在2.0版本之后宣布闭源了,容错组件Hystrix、网关组件Zuul也已经宣布停止维护了。SpringCloud Alibaba技术栈中的各个组件对比SpringCloud来讲,在性能上要更好一些。很多技术是阿里巴巴内部经过多年双11、双12大促的考验,经过不断总结和优化开源出来的产品。