spring技术内幕 读书笔记(一)

版权声明: https://blog.csdn.net/xclltssun/article/details/61415949

前言:
为什么要读 (spring 技术内幕第二版) 这本书
1 作为一名使用了spring好多年的程序员,在开发中遇到了不少问题,最后都是因为不了解spring框架而终。
刚开始工作的时候想深入了解下,但功力不够,读不太懂。而后工作繁忙又没有了时间。
现在有了时间并且功力也差不多了,是时候一看究竟了。
2 自己写代码很多年,都是看同事的代码,有好有坏,现在想看一看大师的编程逻辑与风格。
3 已经知道了what 和 how 现在想知道 why

这本书是2012出版的,现在已经又过去5年了,技术已出现了很多的改进和更新。所以在读书的时候会把现在和过去加以对比,更新最新动态。

spring的设计理念和整体架构

spring的各个子项目
官网 http://spring.io/projects
源码https://github.com/spring-projects
spring 开源主项目一共有22个,下面就简要介绍一下,熟悉下spring的整个生态系统

1.Spring IO platform
Spring起初只专注ioc和aop,现在已发展成一个庞大体系。比如security、mvc等。 如此一来,不同模块或者与外部进行集成时,依赖处理就需要各自对应版本号。比如,较新spring与较老的quartz,它们集成就会遇到问题,给搭建和升级带来不便。 因此Spring IO Platform应运而生,只要项目中引入了它,外部集成时依赖关系无需版本号。Spring IO Platform只是一个pom文件,记录了spring与其他开源项目对应的版本。 省去了版本号,也就省去了处理依赖时的问题,因为Spring IO Platform中有最优的版本。

2.Spring Boot
如果你想搭建一个项目,那就需要下载Spring的相关包,还有服务器,代码管理等等,现在boot给了你解决方案
1. 创建独立的Spring应用程序
2. 嵌入的Tomcat,无需部署WAR文件
3. 简化Maven配置
4. 自动配置Spring
5. 提供生产就绪型功能,如指标,健康检查和外部配置
6. 绝对没有代码生成和对XML没有要求配置

3.Spring Framework
SpringFramework 官方文档
Spring核心,包括了IOC设计,AOP功能等等,看下图
这里写图片描述

4.Spring Cloud Data Flow
Spring Cloud Data Flow 提供了为基础微服务的分布式流媒体 和 任务/批量数据管道 的一个收集的模板和最佳实践.

5.Spring Cloud
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
Spring Cloud的子项目,大致可分成两类,一类是对现有成熟框架”Spring Boot化”的封装和抽象,也是数量最多的项目;第二类是开发了一部分分布式系统的基础设施的实现,如Spring Cloud Stream扮演的就是kafka, ActiveMQ这样的角色。对于我们想快速实践微服务的开发者来说,第一类子项目就已经足够使用

6.Spring Data
Spring Data是一个用于简化数据库访问,并支持云服务的开源框架。其主要目标是使得数据库的访问变得方便快捷,并支持map-reduce框架和云计算数据服务。此外,它还支持基于关系型数据库的数据服务,如Oracle RAC等。对于拥有海量数据的项目,可以用Spring Data来简化项目的开发,就如Spring Framework对JDBC、ORM的支持一样,Spring Data会让数据的访问变得更加方便。

7.Spring Integration
Spring Integration是Spring项目中秉承其相同目标和原则的新成员。它扩展了Spring的编程模型到消息领域,在Spring已经存在的企业集成支持的基础上,提供了更高级别的抽象。它将控制反转添加到关注点,支持消息驱动架构,例如当特定业务逻辑应该执行时,响应也应该被发送。它支持路由和消息转换,所以不同的传输协议和不同的数据格式能在不影响易测试性的前提下被集成。换句话说,消息和集成关注点都被框架处理,所以业务组件能更好地与基础设施隔离,从而降低开发者所要面对的复杂的集成职责。

8.Spring Batch
Spring Batch是一个轻量级的,完全面向Spring的批处理框架,可以应用于企业级大量的数据处理系统。Spring Batch以POJO和大家熟知的Spring框架为基础,使开发者更容易的访问和利用企业级服务。Spring Batch可以提供大量的,可重复的数据处理功能,包括日志记录/跟踪,事务管理,作业处理统计工作重新启动、跳过,和资源管理等重要功能。

9.Spring Security
Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC和AOP功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。

10.Spring HATEOAS
如果 Web 应用基于 Spring 框架开发,那么可以直接使用 Spring HATEOAS 来开发满足 HATEOAS 约束的 Web 服务。
HATEOAS(Hypermedia as the engine of application state)是 REST 架构风格中最复杂的约束,也是构建成熟 REST 服务的核心。它的重要性在于打破了客户端和服务器之间严格的契约,使得客户端可以更加智能和自适应,而 REST 服务本身的演化和更新也变得更加容易。

11.Spring Social
Spring Social提供了对社交网络服务的抽象,并提供了相关的 API 来进行操作。使用 Spring Social 的最大好处在于它已经提供了对主流社交网站的支持,只需要简单配置即可。对于一些不太常用的社交网站,也可以从社区中找到相应的组件。

12.Spring AMQP
Spring AMQP 是基于 Spring 框架的AMQP消息解决方案,提供模板化的发送和接收消息的抽象层,提供基于消息驱动的 POJO的消息监听等,很大方便我们使用RabbitMQ程序的相关开发。Spring AMQP包含一些模块,如:spring-amqp, spring-rabbit and spring-erlang等,每个模块分别由独立的一些Jar包组成. Spring AMQP的目的是提供不依赖于任何特定的AMQP代理实现或客户端库通用的抽象。最终用户代码将很容易实现更易替换、添加和删除AMQP,因为它可以只针对抽象层来开发。这可以很方便我们选择和使用哪一个具体的broker实现,如sping-rabbit实现。

13.Spring Mobile
Spring Mobile 是 Spring MVC 的扩展,用来简化手机上的Web应用开发。

14.Spring For Android
Spring For Android是Spring框架的一个扩展,其主要目的在乎简化Android本地应用的开发,这其中包括了你可以使用该项目提供的RestTemplate来为你的Android客户端提供REST服务,另外该项目还提供了跟其它诸如Twitter和Facebook等社交网络的集成与OAuth授权客户端等等。

15.Spring Web Flow
Spring Web Flow (SWF) 是Spring Framework的一个脱离模块。这个模块是Spring Web应用开发模块栈的一部分,Spring Web包含Spring MVC。Spring Web Flow 的目标是成为管理Web应用页面流程的最佳方案。当你的应用需要复杂的导航控制,例如向导,在一个比较大的事务过程中去指导用户经过一连串的步骤的时候,SWF将会是一个功能强大的控制器。

16.Spring Web Services
Spring Web Services 是一个spring的社区产品,专注于创建文档驱动的Web服务。Spring Web Services旨在促进SOAP服务的发展,允许一种加载处理XML的方法来创造灵活的Web服务。该产品是基于Spring本身,这意味着你可以使用Spring的概念,如依赖注入作为您的Web服务的一个组成部分。

17.Spring LDAP
LDAP(Lightweight Directory Access Protocol)是轻量目录访问协议。Spring LDAP是一个java简单应用在LDAP开发的一个库,是采取类似Spring JDBC中的JdbcTemplate的原理建立的。它使得我们完全没必要考虑LdapContext的生成和关闭以及NamingEnumeration的循环。在Spring’s DataAccessException基础上建立的Spring-LDAP提供一个更加全面且不用检查的异常处理机制。作为补充,Spring-LDAP也有了动态建立LDAP filters和DNs(Distinguished Names)的类。

18.Spring Session
Spring Session为企业级Java应用的session管理带来了革新,将session所保存的状态卸载到特定的外部session存储中,如Redis或Apache Geode中,它们能够以独立于应用服务器的方式提供高质量的集群等功能。需要说明的很重要的一点就是,Spring Session的核心项目并不依赖于Spring框架,所以,我们甚至能够将其应用于不使用Spring框架的项目中。

19.Spring Shell
Spring Shell 提供交互式的 Shell 可让你使用简单的基于 Spring 的编程模型来开发命令。

20.Spring XD
Spring XD(eXtreme Data,极限数据)是Pivotal的大数据产品。它结合了Spring Boot和Grails,组成Spring IO platform的执行部分。尽管Spring XD利用了大量现存的Spring项目,但它是一种运行时环境,而不是一个类库或者框架,它包含带有服务器的bin目录,你可以通过命令行启动并与之交互。运行时可以运行在开发机上、客户端自己的服务器上、AWS EC2上或者Cloud Foundry上。

21.Spring Flo
Spring Flo 是一个 JavaScript 库,是基于 Spring Cloud Data Flow 中的流构建器。

22.Spring for Apache Kafka
kafka是一个分布式消息发布订阅系统,它最初由LinkedIn公司基于独特的设计实现为一个分布式的提交日志系统( a distributed commit log),之后成为Apache项目的一部分。Kafka系统快速、可扩展并且可持久化。它的分区特性,可复制和可容错都是其不错的特性。Spring Kafka是Spring官方提供的一个Spring集成框架的扩展,用来为使用Spring框架的应用程序提供Kafka框架的集成。

猜你喜欢

转载自blog.csdn.net/xclltssun/article/details/61415949