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;java

 

 

1 前言 web

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

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

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

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

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

五、尽可能减小没必要要的异常捕捉。

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

2.1.3 Spring的目标

一、能够使人方便愉快的使用Spring。

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

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

2.1.4 Spring的基本组成

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

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

三、JDBC抽象层。

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

五、AOP功能。

六、灵活的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主要的组件,以及它的访间流程
  一、外部或者内部的非 Spring Cloud目都统一经过API网关(Zuul)来访可内部服务.
  二、网关接收到请求后,从注册中心( Eureka)获取可用服务
  三、由 Ribbon进行均负载后,分发到后端的具体实例
  四、徹服务之间经过 Feign进行通讯处理业务
  五、 Hystrix负责处理服务超时熔断
  六、 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框架的单体微服务;

 

 

 

参考文献

相关文章
相关标签/搜索