Spring家族主流成员介绍

摘 要:

Spring 就像一个大家族,有众多衍生产品例如 Boot,Security,JPA等等。但他们的基础都是Spring 的 IOC 和 AOP,IOC提供了依赖注入的容器,而AOP解决了面向切面的编程,然后在此两者的基础上实现了其他衍生产品的高级功能;

Spring MVC是基于 Servlet 的一个 MVC 框架,主要解决 WEB 开发的问题;

Spring Boot 是基于Spring的一套快速开发整合包,Spring Boot遵循的也是约定优于配置原则,它的目的在于实现自动配置,降低项目搭建的复杂度;

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。

关键词:Spring;SpringMVC;SpringBoot;SpringCloud;IOC;AOP;

1 前言 

对于一个Java开发者来说,Spring可谓如雷贯耳,无论是Spring框架,还是Spring引领的IOC,AOP风格,都对后续Java开发产生的深远的影响,同时,Spring社区总能及时响应开发者的需求,推出适应潮流发展的新功能特定;而对于大部分开发者而言,平时接触最多的应该就是Spring MVC以及Spring Boot了,本文将分别对Spring,Spring MVC,Spring Boot以及SpringCloud做总体概述,并分析阐述它们各自想要解决的问题,以便初学者能更好的了解Spring及相关概念。

2 概念解读

2.1 什么是Spring?

2.1.1 简介

 Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

 Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring的核心是控制反转(IoC)和面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源框架。

2.1.2 Spring的初衷

1、JAVA EE开发应该更加简单。

2、使用接口而不是使用类,是更好的编程习惯。Spring将使用接口的复杂度几乎降低到了零。

3、为JavaBean提供了一个更好的应用配置框架。

4、更多地强调面向对象的设计,而不是现行的技术如JAVA EE。

5、尽量减少不必要的异常捕捉。

6、使应用程序更加容易测试。

2.1.3 Spring的目标

1、可以令人方便愉快的使用Spring。

2、应用程序代码并不依赖于Spring APIs。

3、Spring不和现有的解决方案竞争,而是致力于将它们融合在一起。

2.1.4 Spring的基本组成

1、最完善的轻量级核心框架。

2、通用的事务管理抽象层。

3、JDBC抽象层。

4、集成了Toplink, Hibernate, JDO, and iBATIS SQL Maps。

5、AOP功能。

6、灵活的MVC Web应用框架。

2.1.5 Spring的发展

Spring框架几乎涉及到了Java企业级服务开发的所有方面,也几乎针对所有开发常用的模式、中间件、数据库进行了整合适配。

之前在聊互联网架构模式的时候我谈到过,很多时候我们写一个业务把逻辑写死写出来是比较容易的,但是把这个逻辑提取成模式进而打包成一个框架来给大家使用,这是比较难的。因为我们只有经历过足够多的场景后才能提取出普适的功能框架,大部分人才能用上,而且我们需要针对核心功能开放出可配置的部分,满足小部分人进一步定制和扩展功能的需要。

Spring框架经历了几个阶段:

1.第一个阶段推出的Core、Security、Data是把单体应用开发服务好。不仅仅提供了便捷的数据库访问、Web MVC等必要功能,而且通过AOP、IOC两大利器让我们的程序内在能够做到低耦合可扩展。

2.第二个阶段推出的Boot的意义,不仅仅是加速了开发效率,而且能让我们的程序从可用变为好用,应用程序核心业务逻辑可能只有70%的工作量,要让程序在线上跑的愉快,还有30%的监控日志打点等工作量需要去做。

3.第三个阶段推出的Cloud的意义,在于推动了微服务架构的落地。让不具备开发微服务基础套件的小型互联网公司也能享受到免费的开箱即用的微服务解决方案。其实很多人不是看了微服务的架构思想去寻找解决方案,而是了解到了Spring Cloud才去了解微服务思想从而落地的。

4.目前属于第四个阶段,大力发展Cloud Dataflow+容器。Dataflow的思想是不管是做实时消息处理的服务还是临时运行的任务,都可以认为是服务的组件,如果可以有一套DSL来定义这些组件之间的交互方式,然后在容器中进行自由组合、部署、伸缩,那么架构会非常灵活。下图是Dataflow管理界面的一个示意图。

Spring的发展可以看到互联网架构的发展,Spring给我们带来相当多的技术启发,从软件设计模式的启发慢慢到了架构的启发,甚至我觉得Spring是为Java开发打造了架构风格的模板,接下去Spring继续发展2到3年有望成为架构标准,我在想这个时候应用架构师何去何从?

2.2 什么是SpringMVC?

2.2.1 简介

Spring MVC是基于 Servlet 的一个 MVC 框架,主要解决 WEB 开发的问题。

2.2.2 用途介绍

Spring MVC是Spring的一部分,主要用于开发WEB应用和网络接口,它是Spring的一个模块,通过Dispatcher Servlet, ModelAndView 和 View Resolver,让应用开发变得很容易。

一个典型的Spring MVC应用开发分为下面几步:
首先通过配置文件声明Dispatcher Servlet:

通过配置文件声明servlet详情,如MVC resource,data source,bean等

若需添加其它功能,如security,则需添加对应配置:

增加业务代码,如controller,service,model等,最后生成war包,通过容器进行启动

2.2.3 SpringMVC常用注解

@Controller  负责注册一个bean 到spring 上下文中

@RequestMapping 注解为控制器指定可以处理哪些 URL 请求

@RequestBody  该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上 ,再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上

@ResponseBody  该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区

@ModelAttribute  在方法定义上使用 @ModelAttribute 注解:Spring MVC 在调用目标处理方法前,会先逐个调用在方法级上标注了@ModelAttribute 的方法

  在方法的入参前使用 @ModelAttribute 注解:可以从隐含对象中获取隐含的模型数据中获取对象,再将请求参数 –绑定到对象中,再传入入参将方法入参对象添加到模型中 

@RequestParam 在处理方法入参处使用 @RequestParam 可以把请求参 数传递给请求方法

@PathVariable 绑定 URL 占位符到入参

@ExceptionHandler 注解到方法上,出现异常时会执行该方法

@ControllerAdvice 使一个Contoller成为全局的异常处理类,类中用@ExceptionHandler方法注解的方法可以处理所有Controller发生的异常

2.3 什么是SpringBoot?

2.3.1 简介

Spring Boot 是基于Spring的一套快速开发整合包

Spring Boot 简化了基于Spring的应用开发,只需要“run”就能创建一个独立的、生产级别的Spring应用。Spring Boot为Spring平台及第三方库提供开箱即用的设置(提供默认设置),这样我们就可以简单的开始。多数SpringBoot应用只需要很少的Spring配置。

2.3.2 用途介绍

Spring Boot的核心思想就是约定大于配置,一切自动完成。采用 Spring Boot可以大大的简化你的开发模式,所有你想集成的常用框架,它都有对应的组件支持。你甚至都不用额外的WEB容器,直接生成jar包执行即可,因为spring-boot-starter-web模块中包含有一个内置tomcat,可以直接提供容器使用;基于Spring Boot,不是说原来的配置没有了,而是Spring Boot有一套默认配置,我们可以把它看做比较通用的约定,而Spring Boot遵循的也是约定优于配置原则,同时,如果你需要使用到Spring以往提供的各种复杂但功能强大的配置功能,SpringBoot一样支持

在Spring Boot中,你会发现你引入的所有包都是starter形式,如:

·  spring-boot-starter-web-services,针对SOAP Web Services

·  spring-boot-starter-web,针对Web应用与网络接口

·  spring-boot-starter-jdbc,针对JDBC

·  spring-boot-starter-data-jpa,一套JPA应用框架

·  spring-boot-starter-cache,针对缓存支持

·  等等

Spring Boot对starter的解释如下:

Starters are a set of convenient dependency descriptors that you can include in your application. You get a one-stop-shop for all the Spring and related technology that you need, without having to hunt through sample code and copy paste loads of dependency descriptors. For example, if you want to get started using Spring and JPA for database access, just include the spring-boot-starter-data-jpa dependency in your project, and you are good to go

这句话的译意为:

Starters是一系列极其方便的依赖描述,通过在你的项目中包含这些starter,你可以一站式获得你所需要的服务,而无需像以往那样copy各种示例配置及代码,然后调试,真正做到开箱即用;比如你想使用Spring JPA进行数据操作,只需要在你的项目依赖中引入spring-boot-starter-data-jpa即可

2.3.3 主要目标

1.为所有Spring的开发提供一个从根本上更快的入门体验

2.开箱即用,但通过自己设置参数,即可快速摆脱这种方式。

3.提供了一些大型项目中常见的非功能性特性,如内嵌服务器、安全、指标,健康检测、外部化配置等

4.绝对没有代码生成,也无需 XML 配置。

2.4 什么是SpringCloud?

2.4.1 简介

SpringCloud是一系列框架的有序集合。它利用Spring Boot的开发便利性,巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。

2.4.2 Spring Cloud组成

Spring Cloud的子项目,大致可分成两类,一类是对现有成熟框架”Spring Boot化”的封装和抽象,也是数量最多的项目;第二类是开发了一部分分布式系统的基础设施的实现,如Spring Cloud Stream扮演的就是kafka, ActiveMQ这样的角色。对于我们想快速实践微服务的开发者来说,第一类子项目就已经足够使用,如:

.Spring Cloud Netflix
  是对Netflix开发的一套分布式服务框架的封装,包括服务的发现和注册,负载均衡、断路器、REST客户端、请求路由等。

.Spring Cloud Config
  将配置信息中央化保存, 配置Spring Cloud Bus可以实现动态修改配置文件

.Spring Cloud Bus
  分布式消息队列,是对Kafka, MQ的封装

.Spring Cloud Security
  对Spring Security的封装,并能配合Netflix使用

.Spring Cloud Zookeeper
  对Zookeeper的封装,使之能配置其它Spring Cloud的子项目使用

.Spring Cloud Eureka

Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件中的一部分,它基于Netflix Eureka 做了二次封装,主要负责完成微服务架构中的服务治理功能。

2.4.3  Spring Cloud架构

 我们从整体来看一下 Spring Cloud主要的组件,以及它的访间流程
  1、外部或者内部的非 Spring Cloud目都统一通过API网关(Zuul)来访可内部服务.
  2、网关接收到请求后,从注册中心( Eureka)获取可用服务
  3、由 Ribbon进行均负载后,分发到后端的具体实例
  4、微服务之间通过 Feign进行通信处理业务
  5、 Hystrix负责处理服务超时熔断
  6、 Turbine监控服务间的调用和焠断相关指标

3 Spring和SpringMVC

1. spring是一个一站式的轻量级的java开发框架,核心是控制反转(IOC)和面向切面(AOP),针对于开发的WEB层(springMvc)、业务层(Ioc)、持久层(jdbcTemplate)等都提供了多种配置解决方案;

2. springMvc是spring基础之上的一个MVC框架,主要处理web开发的路径映射和视图渲染,属于spring框架中WEB层开发的一部分;

 

4 SpringMVC和SpringBoot

1. springMvc属于一个企业WEB开发的MVC框架,涵盖面包括前端视图开发、文件配置、后台接口逻辑开发等,XML、config等配置相对比较繁琐复杂;

2. springBoot框架相对于springMvc框架来说,更专注于开发微服务后台接口,不开发前端视图;

5 Spring,Spring MVC,Spring Boot 三者比较

这三者专注的领域不同,解决的问题也不一样;总的来说,Spring 就像一个大家族,有众多衍生产品例如 Boot,Security,JPA等等。但他们的基础都是Spring 的 IOC 和 AOP,IOC提供了依赖注入的容器,而AOP解决了面向切面的编程,然后在此两者的基础上实现了其他衍生产品的高级功能;Spring MVC是基于 Servlet 的一个 MVC 框架,主要解决 WEB 开发的问题,因为 Spring 的配置非常复杂,各种xml,properties处理起来比较繁琐。于是为了简化开发者的使用,Spring社区创造性地推出了Spring Boot,它遵循约定优于配置,极大降低了Spring使用门槛,但又不失Spring原本灵活强大的功能,下面用一张图来描述三者的关系:

6 SpringBoot和SpringCloud

1.Spring Boot使用了默认大于配置的理念,集成了快速开发的Spring多个插件,同时自动过滤不需要配置的多余的插件,简化了项目的开发配置流程,一定程度上取消xml配置,是一套快速配置开发的脚手架,能快速开发单个微服务;

2.SpringCloud大部分的功能插件都是基于SpringBoot去实现的,springCloud关注于全局的微服务整合和管理,将多个SpringBoot单体微服务进行整合以及管理;SpringCloud依赖于SpringBoot开发,而SpringBoot可以独立开发;

7 结论

1.Spring 框架就像一个家族,有众多衍生产品例如 boot、security、jpa等等。但他们的基础都是Spring的ioc、aop等. ioc 提供了依赖注入的容器, aop解决了面向横切面编程,然后在此两者的基础上实现了其他延伸产品的高级功能;

2.SpringMvc是基于Servlet 的一个MVC框架主要解决WEB开发的问题,因为Spring的配置非常复杂,各种XML、JavaConfig、servlet处理起来比较繁琐;

3.为了简化开发者的使用,从而创造性地推出了SpringBoot框架,默认优于配置,简化了SpringMVC的配置流程;

但区别于SpringMVC的是,SpringBoot专注于微服务方面的接口开发,和前端解耦,虽然SpringBoot也可以做成SpringMVC前后台一起开发,但是这就有点不符合SpringBoot框架的初衷了;

4.对于SpringCloud框架来说,它和SpringBoot一样,注重的是微服务的开发,但是SpringCloud更关注的是全局微服务的整合和管理,相当于管理多个SpringBoot框架的单体微服务;

原文:https://blog.csdn.net/wangsun300/article/details/89532833
版权声明:本文为博主原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/651434092qq/p/11805854.html