百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

Spring Boot2精髓(从构建小系统到架构分布式大系统)

yuyutoo 2024-10-23 16:41 2 浏览 0 评论




内容简介:

Spring Boot是目前Spring技术体系中炙手可热的框架之一,既可用于构建业务复杂的企业应用系统,也可以开发高性能和高吞吐量的互联网应用。Spring Boot 框架降低了Spring 技术体系的使用门槛,简化了Spring 应用的搭建和开发过程,提供了流行的第三方开源技术的自动集成。

本书系统介绍了Spring Boot2的主要技术,侧重于两个方面,一方面是极速开发一个Web应用系统,详细介绍Spring Boot框架、Spring MVC.视图技术、数据库访间技术,并且介绍多环境部署、自动装配、单元测试等高级特性:另一方面, 当系统模块增加,性能和吞吐量要求增加时,如何平滑地用Spring Boot实现分布式架构,也会在本书后半部分介绍,包括使用Spring实现RESTful架构,在Spring Boot框架下使用Redis、MongoDB. ZooKeeper. Elastisearch 等流行技术,使用Spring Session 实现系统水平扩展,使用Spring Cache提高系统性能。

阅读本书的人,可以是Java新手,从未使用过任何Spring技术的工程师。也可以是用过Spring, 但想进一步了解Spring Boot的开发者。如果你已经使用过Spring Boot,那么本书也非常适合你全面深入了解Spring Boot。

第一章:Java EE简介


1.1Java EE

从2001年开始接触Java EE技术,当时面对Java EE那么多组件和规范,比如,EJB技术,确实有点发懵了。编写一个企业应用居然用到了那么多技术,曾经的电信项目,启动就需要10分钟,每次发布都需要一个小时。 作为新手的我是不能理解的,这也是当时大多数程序员的心态。然而JavaEE针对复杂企业系统所指定的规范和实现,能满足复杂的企业应用需求,这也是为什么Java EE很快就流行起来,并在电信、银行等领域广泛使用的原因。2003年Spring横空出世,告诉所有人,编写企业应用、Web应用,并非需要全部的JavaEE技术,也不需要像EJB那样复杂的使用方式和部署方式。使用Spring, 开发并部署网站和企业应用变得很便捷。同时Spring建立在Java EE基础上,同样可以使用Java EE的功能。基于技术的创新和兼容传统Java EE技术,使得Spring框架很快流行起来,普遍使用在传统企业应用和互联网应用中。

1.1.1Java EE架构

要应用Spring Boot技术,并不一定需要先从Spring 技术开始,更不需要了解JavaEE。然而,稍微了解JavaEE和Spring技术,对SpringBoot会有更深的理解。


1.1.2 Java EE 的缺点

Java EE 的出现,结束了 Web 开发的技术无序状态,让程序员、架构师用同 种思维去思考如何架构和开发应用(指企业应用和 Web 网站,以下同),然而 Java EE 也有其局限性:


l.2 Spring

Spring 是为了解决应用复杂性而产生的框架,它吸取了 Java EE 容器管理的优点,提供了IoC 容器来管理 Bean 井通过 OP 方式来增强 Bean 的功能,不同的是它并没像 Java EE那样详细规定容器提供的是何种服务和容器里运行的具体组件类型 Spring 只提供了两种机制,控制反转 Cl oC )和面向切面 CAOP ),来提供任意的服务和增强 Bean 的任意特性,使得 Spring本身容易掌握,又可以通过 Bean 管理来无限扩展功能。

1.2.1 Spring loC 容器和 AOP



1 .2.2 Spring 的缺点

随着Spring的功能越来越强,在使用Spring的时候,门槛也变得高了起来,诸如搭建-个基于Spring的Web程序却并不简单,需要进行各种配置。Spring中-些过时的技术也经常无意地被引用到最新项目中。新手面对同一种需求会面临选择困难,比如处理事务是用XML配置好,还是使用注@Trasactional好?这是因为Spring通过多年的发展,本身变得臃肿,过时的使用方式没有被淘汰固然很好,但会给初学者带来使用上的混乱。同时Spring也集成了越来越多的第三方技术,如何方便地使用这些第三方技术,各版本之间不会产生冲突也需要一定的实践。尽管Spring很强大,但它也在犯Java EE的错误,例如有如下缺点:


1.3 Spring Boot

Spring Boot简化了Spring 应用开发,不需要配置就能运行Spring应用,Spring Boot管理Spring容器、第三方插件,并提供很多默认系统级的服务。大部分Spring 应用,无论是简单的Web系统,还是构建复杂系统,都只需要少量配置和代码就能完成。这有点像每个公司基于Spring框架做的内部开发框架,不同的是,Spring Boot更完善、更强大。


1.4 Hello , Spring Boot

本节完成 个简单的 Web 应用,输出“Hello, Spring oot ”。例子基于己经安装好的环境,只需要 IDK8 Ec ipse ,还有 Maven3 就可以了,如果你还没有安装或者熟悉这些工具,仍然可以先阅读本章,也可以先参考第 章的环境搭建后,再按照本章的代码边写边学习。

1.4.1 创建一个 Maven 工程


1.4.2 增加 Web 支持

本章的例子是一个简单的Web 应用,不用像以往的各种框架需要下载安装一个Web服务器,然后创建Web工程,配置web.xml、applicationContext.xml。 使用Spring Boot,仅仅需要在pom文件中声明使用Spring Boot,并添加→个spring- bostarter-web的依赖即可。Spring Boot会使用内置的Tomcat作为WebServer,并且自动配置好Spring应用所需要的一切配置文件。


1.4.1 创建一个 Maven 工程


1.4.2 增加 Web 支持

本章的例子是一个简单的Web应用,不用像以往的各种框架需要下载安装一个Web服务器,然后创建Web工程,配置web.xml、applicationContext.xml. 使用Spring Boot,仅仅需要在pom文件中声明使用Spring Boot,并添加→个spring-boo-starter-web的依赖即可。Spring Boot会使用内置的Tomcat作为WebServer,并且自动配置好Spring应用所需要的--切配置文件。

1.4.3Hello Spring Boot示例

1.4.4 使用热部署


1.4.5 添加 REST 支持

如果你的系统并非- -个单- -的Web应用,而是由多个系统构成的,比如独立出一个积分系统,为其他系统(如支付系统)提供管理用户积分、显示用户积分、增加用户积分等操作。系统之间的调用方式有很多, RESTFul也是一种很好的方式。Spring Boot能很方便地支持RESTFul应用。


第二章:Spring Boot 基础


本章首先介绍如何安装Spring Boot 应用的开发环境,如果你是新手,需要安装Java8和Maven3。Spring Boot应用中Maven是必备工具,因此这一章 也会详细介绍Maven工具的安装、配置和使用。最后会再次介绍Spring的历史、IoC 容器和Spring常用的注解。如果你已经熟悉Java和Maven,可以直接跳过这一章。(这一章小编就不详细介绍啦)

第三章:MVC 框架


在Spring框架和Spring Boot中,最常用的技术就是MVC框架。试图讲清楚Spring MVC的内容,有可能需要一本书来讲述。本章将介绍MVC中最实用的部分,一些不常用的技术,.或者过时的技术将不做介绍。


3.1 集成 MVC 框架

3.1.1 引入依赖


3.1.2 Web 应用目录结构


3.1.3 Java 包名结构


3.2 使用 Controller

SpringMVC框架不像传统的MVC框架那样必须继承某个基础类才能处理用户的HTTP请求,Spring MVC只需要在类上声明@Controller,标注这是一个Controller即可。对于用户请求,使用@RequestMapping映射HTTP请求到特定的方法处理类。


3.3 URL 映射到方法

从本节开始,将学习HTTP请求到Spring Controller的方法的映射,Spring MVC提供了各种各样的映射方式,尽管会让SpringMVC框架的学习成本提高,但SpringMVC框架能让Web应用的代码更容易阅读和维护。

建议学习本章知识后,可以按照前面提到的“故意制造一些错误”的学习方法,看看SpringMVC有什么错误提示,这样有助于加深对SpringMVC的理解。

3.3.1 @RequestMapping


3.3.2 URL 路径匹配

属性 alue 于匹配一个 URL 映射, value 支持简单的表达式来匹配:


3.3.3 HTTP method 匹配



3.3.4 consumes produces


3.3.5 params header 匹配


3.4 方法参数



3.4.1 PathVariable


3.4.2Model&ModelAndView

任何MVC框架都有-个类似Map结构的Model,可以向Model添加视图需要的变量,SpringMVC中的Model就是完成此功能的。Model 对象主要有如下方法:

3.4.3 JavaBean 接受 HTTP 参数


3.4.4 @ RequsetBody 接受 JSON


3.4.5 MultipartFile


3.4.6 @ModelAttribute


3.4.7 @lnitBinder


3.5 验证框架

Spring Boot 支持 JSR-303 Bean 验证框架 默认实现用的是 Hibernate validator 。在 SpringMVC 中,只需要使用@Valid 注解标注在方法参数上, Spring Boot 即可对参数对象进行校验校验结果放在 BindingResult 对象中。

3.5.1 JSR-303

JSR-303是Java标准的验证框架,已有的实现有Hibernate validator。 JSR-303 定义了一系列注解用来验证Bean的属性,常用的有如下几种。


3.6 WebMvcConfigurer

WebMvcConfigurer是用来全局定制化SpringBoot的MVC特性。开发者通过实现WebMvcConfigurer接口来配置应用的MVC全局特性。

3.6.1 拦截器

3.6.2 跨域访问

3.6.3 格式化

3.6.4 注册 Controller


3.7 视图技术


3.7.1 使用 Freemarker

安装 Freemaker ,需要在 porn 中添加如下依赖:

<dependency> <groupid>org . springframework .boot</groupid> <artifactid>spring-boot-starter-freemarker</artifactid> </dependency>

3.7.2 使用 BeetI

Beet! 是笔者开发的一个模板引擎,它的语法和使用习惯参考了 JS ,因此学习起来较快,同

时在功能和性能上也做了很大的提升。集成 Beet!需要在 Maven 中添加如下依赖:


3.7.3 使用 Jackson

在MVC框架中, Spring Boot内置了Jackson 来完成JSON的序列化和反序列化。在Controller中,方法注解为@ResponseBody,自动将方法返回的对象序列化成JSON。


3.7.4 Redirect Forward

通常而言,Controller 都会返回一个视图名称,比如以btl结尾的视图会交给Beetl模板引擎渲染。有些情况下,Controller 会返回客户端一一个HTTP Redirect 重定向请求,希望客户端按照指定地址重新发起- -次请求,比如客户登录成功后,重定向到后台系统首页。再比如客户端通过POST提交了一个名单,可以返回一个重定向请求到此订单明细的请求地址。这样做的好处是,如果用户再次刷新页面,则访问的是订单详情地址,而不会再次提交订单。


3.8 通用错误处理

在Spring Boot中,Contoller 中抛出的异常默认交给了error来处理,应用程序可以将error映射到一个特定的Contollr中处理来代替Spring Boot的默认实现,应用可以继承AbstractErorController来统一处理系统的各种异常。


3. 9 @Service 和@Transactional

到目前为止,Spring Boot的Contoller介绍完毕,在Spring Boot中,Controller调用业务逻辑处理交给了被@Service注解的类,这也是个普通的JavaBean, Controller 中可以自动注入这种Bean,并调用其方法完成主要的业务逻辑。正如Contoller注解经常和@RequestMapping搭配使用一样,@Service 和@Transactional配合使用。

3.9.1声明一 个Service类

在Spring Boot应用中,业务逻辑集中在Service 中处理,并自动注入到Controller中处理。实现-一个Service类,需要定义-一个业务的接口,比如根据id查询用户及更新用户状态:


3.9.2 事务管理

Spring 单地实现了事务管理,通过 Service 类中使用@Transan 来让 巳凹ice 参与事务管理。为了使用事务 需要在 porn 添加 以下依赖:


以上内容太多,小编就不一一详细介绍了,希望大家能够仔细品读这篇优质作品,得之,幸之,会让自己提升一个台阶的。如果大家需要这篇【Spring Boot2精髓(从构建小系统到架构分布式大系统)】文档的话,就可以转发此文关注小编,私信小编“学习”得到获取方式吧!


相关推荐

史上最全的浏览器兼容性问题和解决方案

微信ID:WEB_wysj(点击关注)◎◎◎◎◎◎◎◎◎一┳═┻︻▄(页底留言开放,欢迎来吐槽)●●●...

平面设计基础知识_平面设计基础知识实验收获与总结
平面设计基础知识_平面设计基础知识实验收获与总结

CSS构造颜色,背景与图像1.使用span更好的控制文本中局部区域的文本:文本;2.使用display属性提供区块转变:display:inline(是内联的...

2025-02-21 16:01 yuyutoo

写作排版简单三步就行-工具篇_作文排版模板

和我们工作中日常word排版内部交流不同,这篇教程介绍的写作排版主要是用于“微信公众号、头条号”网络展示。写作展现的是我的思考,排版是让写作在网格上更好地展现。在写作上花费时间是有累积复利优势的,在排...

写一个2048的游戏_2048小游戏功能实现

1.创建HTML文件1.打开一个文本编辑器,例如Notepad++、SublimeText、VisualStudioCode等。2.将以下HTML代码复制并粘贴到文本编辑器中:html...

今天你穿“短袖”了吗?青岛最高23℃!接下来几天气温更刺激……

  最近的天气暖和得让很多小伙伴们喊“热”!!!  昨天的气温到底升得有多高呢?你家有没有榜上有名?...

CSS不规则卡片,纯CSS制作优惠券样式,CSS实现锯齿样式

之前也有写过CSS优惠券样式《CSS3径向渐变实现优惠券波浪造型》,这次再来温习一遍,并且将更为详细的讲解,从布局到具体样式说明,最后定义CSS变量,自定义主题颜色。布局...

柠檬科技肖勃飞:大数据风控助力信用社会建设

...

你的自我界限够强大吗?_你的自我界限够强大吗英文

我的结果:A、该设立新的界限...

行内元素与块级元素,以及区别_行内元素和块级元素有什么区别?

行内元素与块级元素首先,CSS规范规定,每个元素都有display属性,确定该元素的类型,每个元素都有默认的display值,分别为块级(block)、行内(inline)。块级元素:(以下列举比较常...

让“成都速度”跑得潇潇洒洒,地上地下共享轨交繁华
让“成都速度”跑得潇潇洒洒,地上地下共享轨交繁华

去年的两会期间,习近平总书记在参加人大会议四川代表团审议时,对治蜀兴川提出了明确要求,指明了前行方向,并带来了“祝四川人民的生活越来越安逸”的美好祝福。又是一年...

2025-02-21 16:00 yuyutoo

今年国家综合性消防救援队伍计划招录消防员15000名

记者24日从应急管理部获悉,国家综合性消防救援队伍2023年消防员招录工作已正式启动。今年共计划招录消防员15000名,其中高校应届毕业生5000名、退役士兵5000名、社会青年5000名。本次招录的...

一起盘点最新 Chrome v133 的5大主流特性 ?

1.CSS的高级attr()方法CSSattr()函数是CSSLevel5中用于检索DOM元素的属性值并将其用于CSS属性值,类似于var()函数替换自定义属性值的方式。...

竞走团体世锦赛5月太仓举行 世界冠军杨家玉担任形象大使

style="text-align:center;"data-mce-style="text-align:...

学物理能做什么?_学物理能做什么 卢昌海

作者:曹则贤中国科学院物理研究所原标题:《物理学:ASourceofPowerforMan》在2006年中央电视台《对话》栏目的某期节目中,主持人问过我一个的问题:“学物理的人,如果日后不...

你不知道的关于这只眯眼兔的6个小秘密
你不知道的关于这只眯眼兔的6个小秘密

在你们忙着给熊本君做表情包的时候,要知道,最先在网络上引起轰动的可是这只脸上只有两条缝的兔子——兔斯基。今年,它更是迎来了自己的10岁生日。①关于德艺双馨“老艺...

2025-02-21 16:00 yuyutoo

取消回复欢迎 发表评论: