微服务[v1.0.0][Spring生态概述]

Spring的由来

Java是一种面向对象的跨平台的编程语言,其引入了JVM,能够一次编译处处运行,开发者无须再担心操作系统和处理器的不同而导致应用出错,就应用开发而言,无论使用哪种语言,为保证应用代码的可读性、可靠性就需要在单一原则、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则等设计原则的指导下,遵循设计模式进行设计和开发,就设计模式而言,最著名的当属GoF的23种设计模式

  • Java自1995年以JDK1.0发布为诞生标志,迅速成为企业级应用平台开发的主流,尤其作为Android系统的开发语言更是助推了Java语言的发展
  • JDK(Java Development Kit)是一个Java开发工具包,是官方提供的Java运行和开发软件包,主要包含Java运行环境(JRE)、Java基础类库及工具
  • 为促进Java的发展1998年Sun成立了一个开放组织JCP(Java Community Process)
  • 从JDK1.2开始Java技术体系拆分为J2SE/J2EE/J2ME/Swing/Java Plug-in/EJB
  • 后来为了统一Java开发的标准,JCP定义了JavaEE的开发框架,作为企业级应用开发的规范和指南,也包括中间件的标准,包括Servlet、JSP(Java Server Pages)、JDBC(Java Database Connectivity)、JNDI(Java Naming and Directory Interface)、RMI(Remote Method Invocation)、Java IDL/CORBA、XML、JMS(Java Message Service)、JTA(Java Transaction API)、JTS(Java Transaction Service)、Java Mail、JAF(JavaBeans Activation Framework)和EJB(Enterprise JavaBean)

在这里插入图片描述

  • EJB是JavaEE服务端组件模型,其目标与核心是开发和部署分布式应用程序,通过将业务逻辑从客户端抽取出来,封装在一个组件中并运行在一个独立的服务器上,客户端软件通过网络调用服务端的组件实现业务逻辑,这个运行在独立服务器上且封装了业务逻辑的组件被称为EJB,对于开发者来说这里的组件可简单的理解为类,也就是把执行业务逻辑的类打包放在服务器上,通过网络进行调用,实现EJB的技术核心是RMI(Remote Method Invocation),更底层的技术是Socket编程和TCP
  • Spring的出现,EJB除了善于处理分布式应用外,还有一个关键作用就是简化了代码开发、开发者无须处理低级事务、状态管理、多线程和连接池等,全全交给EJB容器管理,但EJB比较复杂,调试困难,内容多学习成本高,并且频繁的序列化和反序列化导致性能不佳,因此逐渐出现了替代的组件和框架,例如远程调用上Web Service标准逐渐盛行出现了Apache CXF框架而Java Bean的管理上则出现了Spring,自2004年Spring发布1.0至今已经到了Spring5.x.x

Spring框架是为了解决企业应用开发的复杂性而诞生的,它简化了Java应用开发,提高了可测性和可重用性;其核心理念之一是通过依赖注入(DI)的方式来实现控制反转(loC),核心理念之二便是面向切面编程(AOP);作为轻量级的IoC容器,Spring框架可轻松实现与其他多种框架的整合,其逐步成为Java企业级开发最流行的框架,形成了以框架为核心的生态圈,成为Java应用开发的一站式解决方案

它是一个分层的JavaSE/EE一站式轻量级框架,以IoC(Inversion of Control控制反转)和AOP(Aspect Oriented Programming面向切面编程)为核心,在Spring中认为一切Java类都是资源,而资源都是类的实例对象(Bean),容纳并管理这些Bean的是Spring所提供的IoC容器,因此Spring也是基于Bean的编程,使用JavaBean来完成以前只有EJB才能完成的工作

他致力于JavaEE应用各层的解决方案,而不仅仅专注于一层

Spring框架原则和理念

  • Spring的目标是提供一个一站式轻量级的应用开发平台,抽象应用开发遇到的共性问题,提供了更个层级的支持,包括MVC框架、数据持久层、事务处理、消息中间件等
  • Spring提供了与其他中间件的广泛支持,开发者可以尽可能晚地决定使用哪种方案,以数据持久层为例,可以通过配置切换持久层框架,无须修改代码,其他的基础框架和第三方API的集成也是如此
  • 强大的向后兼容,功能升级的同时对旧版本保持了很好的兼容性
  • Spring官方提供了全面和易用的API文档,这些API文档稳定性较高,在多个版本中维持不变,Spring框架强调有意义的、及时的和准确的Java Doc,而这得益于Spring清晰干净的代码结构,包之间不存在循环依赖

Spring框架体系结构

在这里插入图片描述
Spring框架包含20多个模块,每个模块由3个左右JAR包组成,而这20多个模块被分成了7大类

  • 容器核心:它提供了Spring的基本功能,容器是Spring框架的基础,负责Bean的创建、拼接、管理和获取
    • Beans模块:提供了BeanFactory,BeanFactory是容器的核心接口,是工厂模式实现的经典,Spring将管理对象称为Bean
    • Core模块:提供了Spring框架的基本组成部分,实现了IoC/DI等核心功能
    • Context模块:在核心模块上进行了功能的扩展,增加了国际化、框架事件体系、Bean生命周期管理和资源加载透明化等功能此外该模块还提供了其他企业级服务的支持,包括邮件服务、JNDI访问、任务调度和EJB集成等,它是访问定义配置的任何对象的媒介,扩展了BeanFactory的功能,其中ApplicationContext是Context模块的核心接口
    • Spring EL模块:它是Spring3.0后新增的模块,提供了Spring Expression Language支持,它是表达式语言模块是统一语言表达式(Unified EL)的一个扩展,用于查询和管理容器、管理对象、获取和设置对象属性、调用对象方法、操作数据等,此外SpEL表达式还可具备逻辑表达式运算和变量定义等功能,基于此表达式,就可以通过字符串与容器进行交互

  • 数据访问/集成:包括JDBC、ORM、OXM、JMS和事务处理5个模块
    • JDBC模块:实现了对JDBC的抽象,简化了JDBC连接数据库和操作的编码
    • ORM模块:对多个流行的ORM框架提供了统一的数据操作方式,提供了与多个第三方持久层框架的良好整合,包括Hibernate、MyBatis、Java Persistence API和JDO
    • OXM模块:提供了对OXM实现的支持(提供了一个支持对象/XML映射的抽象层实现),比如JAXB、Castor、XML Beans、JiBX和XStream等
    • JMS模块:提供了对消息功能的支持,可以生产和消费消息,自Spring4.1后提供了与Spring-messaging模块的集成
    • 事务处理模块:提供了编程式和声明式事务管理,支持JDBC和所有ORM框架
    • Spring在DAO的抽象层面对不同的数据访问技术进行了统一和封装,建立了一套面向DAO的统一异常体系

  • Web与远程调用
    • Servlet模块:也称作Spring-webmvc模块,提供了一个强大的MVC框架,用于Web应用实现视图层与逻辑层的分离和REST Web Services实现的Web应用程序
    • Web模块:提供了面向Web的基本功能和Web应用的上下文,例如使用Servlet监听器的IoC容器初始化、文件上传功能等,且此模块还包括HTTP客户端和Spring远程调用等
    • Portlet模块:提供了用于Portlet环境的MVC实现
    • WebSocket模块:支持在Web应用中客户端和服务端基于WebSocket双向通信,也提供了SockJS的实现,以及对STOMP的支持

  • 其他模块
    • AOP模块:Spring提供了面向切面编程的支持,类似于事务和安全等关注点从应用中解耦出来,允许定义方法拦截器和切入点,将代码按照功能进行分离,从而降低耦合
    • Aspects模块:提供了与AspectJ的集成,它是一个面向切面编程的框架
    • Instrumentation(检测) :该模块提供了在应用服务器中类工具的支持和类加载器实现,Instrument Tomcat是针对于Tomcat的Instrument实现
    • 消息:Messaging模块用于消息处理,它包含了一系列用于映射消息的注解,提供了对消息传递体系结构和协议的支持
    • 测试:Test模块通过JUnit和TestNG框架支持的单元测试和集成测试,提供了一系列的模拟对象辅助单元测试,另外Spring提供了集成测试的框架,可以很容易的加载和获取应用的上下文
    • 同时Spring提供了与其他流行MVC框架的集成,包括Struts、JSF和WebWork等
    • 此外Spring还提供了对REST API的支持,Spring自带一个远程调用框架HTTP invoker,它集成了RMI、Hessian、Burlap和JAX-WS

以上模块均在Maven中可以找到,组名(groupId)是org.springframework,各模块分别对应不同的项目(artifactId),如下表所示

模块名Maven项目名描述
Corespring-core核心库
Beansspring-beansBean支持
Contextspring-context应用的上下文
Contextspring-context-support集成第三方库到上下文
SpELspring-expressionSpring表达式语言
AOPspring-aop基于代理的AOP
Aspectsspring-aspects与AspectJ集成
Instrumentationspring-instrumentJVM引导的检测代理
instrumentation Tomcatspring-instrument-tomcatTomcat的检测代理
Messagingspring-messaging消息处理
JDBCspring-jdbcJDBC的支持和封装
Transactionspring-tx事务处理
ORMspring-orm对象关系映射,支持JPA和Hibernate
OXMspring-oxm对象XML映射
JMSspring-jmsJMS消息支持
Servletspring-webmvcMVC框架及REST Web
Portletspring-webmvc-portletPortlet环境的MVC实现
Webspring-web客户端及Web远程调用
WebSocketspring-websocketWebSocket和SockJS实现
Testspring-test测试模拟对象和测试框架

Spring的优势

Spring作为实现JavaEE的一个全方位应用程序框架,具备以下特点:

  • 非侵入式:指的是Spring框架的API不会在业务逻辑上出现,换句话说业务逻辑应该是纯净的,不能出现与业务逻辑无关的代码,如此才能将业务逻辑从当前应用中剥离出来,从而在其他的应用中实现复用,从框架角度而言,做到业务逻辑中没有Spring的API,所以业务逻辑也可以从Spring框架快速地移植到其他框架
  • 容器:Spring提供了容器功能,容器可以管理对象的生命周期,以及对象与对象之间的依赖关系,可以写一个配置文件(通常是xml),在上面定义对象名字,是否单例,以及设置与其他对象的依赖关系,容器启动后这些对象就被实例化好了,直接就可以用,并且依赖关系也建立好了
  • IoC:控制反转,也就是依赖关系的转移,如果以前都是依赖于实现,那么现在反转为依赖于抽象,核心思想就是面向接口编程
  • 依赖注入:对象与对象之间依赖关系的实现,包括接口注入、构造注入、属性setter方法注入,Spring中支持后两种注入
  • AOP:面向切面编程或者叫面向方面编程,将日志、安全、事务管理等服务或功能理解成一个“方面”以前这些服务通常是直接写在业务逻辑的代码中,导致业务逻辑不纯净且无法做到复用,AOP将这些服务剥离出来形成一个“方面”,实现复用,然后将“方面”动态地插入到业务逻辑中,让业务逻辑能够方便地使用“方面”提供的服务
  • 对JDBC的封装和简化
  • 对事务的管理
  • 对O/R mapping工具(Hibernate、MyBatis)的整合
  • MVC解决方案
  • 与其他Web框架(Struts、JSF)进行整合
  • 对JNDI、mail等服务进行封装

Spring生态

Spring是一个发展和开放的体系,提供了企业应用级开发的一站式服务,包括基于Spring Framework之上的快速开发框架Spring Boot、对服务进行管理和治理的Spring Cloud、以及通过Spring Cloud Data Flow进行服务的连接,从配置到安全,从Web应用到大数据项目,Spring几乎都覆盖
在这里插入图片描述

  • Spring Framework(Core):Spring的核心,其中包含了一系列的IoC容器设计,提供了依赖反转模式的实现,此外Spring框架还包括MVC、JDBC、事务处理及AOP等模块
  • Spring Boot:简化了基于Spring的应用开发,简化了配置,通过少量的代码就可以创建一个独立的、产品级的Spring应用,Spring Boot为Spring平台及第三方库提供了开箱即用的设置,可以快速的搭建项目并开始开发
  • Spring Cloud Data Flow:用于开发和执行大数据处理、批量运算的统一编程模型和托管服务,简化了大数据应用开发
  • Spring Cloud:一系列框架的有序集合,包括分布式/版本化配置Spring Cloud Config、服务注册和发现、Spring Cloud Eureka、路由Spring Cloud Zuul、服务到服务的调用Spring Cloud Feign、负载均衡Spring Cloud Ribbon、断路器Spring Cloud Hystrix、分布式消息传递Spring Cloud Bus
  • Spring Data:提供了对JDBC和ORM很好的支持,同时实现对非关系型数据库、MapReduce框架等统一的方式进行数据访问
  • Spring Integration:体现了“企业集成模式”的具体实现,并为企业的数据集成提供解决方案,它为企业数据集成提供了各种适配器,通过这些适配器来转换各种消息格式,并帮助Spring应用完成与企业应用系统的集成
  • Spring Batch:提供构建批处理应用和自动化操作的框架,简化并优化大量数据的批处理操作,支持事务、并发、流程、监控、纵向和横向扩展,提供统一的接口管理和任务管理
  • Spring Security:广泛使用的基于Spring的认证和安全工具,其前身是Acegi框架,用于认证和授权;他是用Servlet规范中的Filter限制URL级别的访问,保护Web请求,还可以使用AOP保护方法的调用
  • Spring HATEOAS(Hypermedia as the engine of application state):即超媒体即应用状态引擎,相对于REST的最大区别是返回结果中包含下一步的链接
  • Spring REST Docs:快速生成可读的RESTful Service文档
  • Spring AMQP:基于Spring框架的AMQP消息解决方案,它使得在Spring应用中使用AMQP消息服务器变得更为简单,支持Java和.NET
  • Spring Mobile:基于Spring MVC构建,为移动端的服务器应用开发提供支持,它可以在服务器端自动识别链接到服务器的移动端的相关信息,从而为特定的移动端实现应用定制
  • Spring Android:提供了一个在Android应用环境中工作的基于Java的REST客户端
  • Srping Web Flow:构建在Spring MVC基础上,用于开发包含流程的应用程序,定义了一个特定的语言来描述工作流,同时高级的工作流控制器引擎可以管理会话状态,支持AJAX来构建丰富的客户端体验,并提供对JSF的支持
  • Spring Web Service:Spring Boot的Web Service项目
  • Spring LDAP:用于操作LDAP框架,基于Spring的JdbcTemplate模式,简化轻量目录访问协议功能的开发
  • Spring Session:用来创建和管理Servlet HttpSession方案,提供了集群Session的功能,默认使用Redis来存储Session数据,可以解决Session共享等问题
  • Spring Shell:提供交互式Shell,使用简单的命令来开发
  • Spring FIo:一个JavaScript库,基于Spring Cloud Data Flow中的流构建器
  • Spring Kafka:Kafka是一种高吞吐的分布式发布订阅消息系统,是Apache开发的一个开源流处理平台,Spring Kafka对其提供了封装和集成
  • Spring StateMachine:用于简化状态机的开发过程
  • Spring IO Platform:一个依赖包的维护平台,用于解决依赖包的版本冲突问题,在引入第三方依赖的时候,不需要写版本号,该平台会自动选择一个对应的版本
  • Spring Roo:用于快速创建Spring项目的命令工具
  • Spring Scala:用于在Scala语言中使用的Spring框架

还有一些不在维护的项目,例如与Adobe Flex技术集成的Spring BlazeDS Integration;
用于JVM代理的Spring Loaded、与REST交互的命令行REST Shell、大数据产品Spring XD
与FB、Twitter和LinkedIn等社交网络服务集成的Spring Social

Spring资源

©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页