關于我們
書單推薦
新書推薦
|
Java EE互聯(lián)網(wǎng)輕量級框架整合開發(fā)
當前已經(jīng)是移動互聯(lián)網(wǎng)時代,本書主要介紹當前Java互聯(lián)網(wǎng)的主流框架SSM(Spring+Spring MVC+MyBatis,簡稱SSM,下同)組合和Redis(NoSQL)介紹,這些是Java互聯(lián)網(wǎng)的基礎。首先介紹SSM的大概狀況和各類技術在互聯(lián)網(wǎng)中的作用,和一些框架中常用的設計模式;跟著詳細SSM三大框架的應用和實現(xiàn)原理,介紹原理的時候會結合設計模式一起探討,使得讀者能夠明了,同時在Spring AOP技術中加入數(shù)據(jù)庫技術中的隔離層,和其傳播行為的討論,使得讀者更加明確如何使用Spring管理數(shù)據(jù)庫事務。結合Java介紹Redis技術,也是全國首創(chuàng),同時更符合Java開發(fā)者的需求。然后通過搶紅包這樣的熱門話題討論秒殺技術,主要涉及互聯(lián)網(wǎng)最重要,最核心和最困難的問題高并發(fā)下的數(shù)據(jù)安全問題。最后給出一些常見的使用錯誤,不良習慣,典型應用和技巧,幫助讀者用好SSM框架。
適讀人群 :SSM、Java、Redis
涵蓋Java EE主流框架技術SSM+Redis,快速上手開發(fā)
用Spring MVC整合MyBatis框架技術
用Spring整合Redis在Java互聯(lián)網(wǎng)技術上的應用
通過秒殺、搶紅包講解互聯(lián)網(wǎng)高并發(fā)業(yè)務
隨著移動互聯(lián)網(wǎng)的興起以及手機和平板電腦的普及,Java開發(fā)方向發(fā)生了很大變化,漸漸從管理系統(tǒng)走向了互聯(lián)網(wǎng)系統(tǒng);ヂ(lián)網(wǎng)系統(tǒng)的要求是大數(shù)據(jù)、高并發(fā)、高響應,而非管理系統(tǒng)的少數(shù)據(jù)、低并發(fā)和緩慢響應。為順應技術發(fā)展趨勢,2016年春季筆者寫了一本關于MyBatis的著作《深入淺出MyBatis技術原理與實戰(zhàn)》,作為國內(nèi)第一本關于MyBatis技術的著作,該書受到了業(yè)內(nèi)的廣泛肯定。與此同時,電子工業(yè)出版社編輯汪達文給了我一個很好的建議,她建議寫一本Java合集,這更貼近開發(fā)工作的實際需求。在移動互聯(lián)網(wǎng)興起的時代,Spring+Spring MVC+MyBatis(SSM)的Java組合已經(jīng)成為時代的主流,伴隨著NoSQL(緩存)的廣泛應用,Redis成了主要的NoSQL工具,這些都是當今移動互聯(lián)網(wǎng)最為流行的技術,于是筆者打算竭盡所能寫一本SSM+Redis的合集,這就是本書創(chuàng)作的緣起。
移動互聯(lián)網(wǎng)的新要求
高并發(fā):舉個例子,大公司企業(yè)ERP應用,有1萬名員工使用,同時在線的用戶可能只有數(shù)百人,而操作一個業(yè)務的同一個數(shù)據(jù)的可能只有幾個人,其系統(tǒng)一般不會存在高并發(fā)的壓力,使用傳統(tǒng)程序和數(shù)據(jù)庫完全可以應付。在互聯(lián)網(wǎng)中一件熱門的商品,比如新版小米手機,可能剛一上市就有成千上萬的請求到達服務器,要求瞬間執(zhí)行數(shù)以萬計的數(shù)據(jù)操作,對性能要求高,操作不當容易造成網(wǎng)站癱瘓,引發(fā)網(wǎng)站的生存危機。
高響應:企業(yè)管理系統(tǒng)可以緩慢處理一些業(yè)務,而在高并發(fā)的互聯(lián)網(wǎng)系統(tǒng)中,卻不可以,按照互聯(lián)網(wǎng)的要求一般以5秒為上限,超過5秒后響應,用戶體驗不好,從而影響用戶忠誠度,而這些往往需要在高并發(fā)和大數(shù)據(jù)量的場景下實現(xiàn)。
數(shù)據(jù)一致性:由于高并發(fā),多個線程對同一數(shù)據(jù)同時訪問,需要保證數(shù)據(jù)的一致性,比如電商網(wǎng)站的金額、商品庫存不能出錯,還要保證其性能不能太差,這是在管理系統(tǒng)中不會出現(xiàn)的場景。
技術復雜化:在互聯(lián)網(wǎng)中流行許多新技術,比如常見的NoSQL(Redis、MongoDB),又如MQ、RPC框架、ZooKeeper、大數(shù)據(jù)、分布式等技術。
為什么選擇SSM框架+Redis的開發(fā)模式
首先,Struts2框架和Spring結合,多年來改變不了臃腫的老毛病,更為嚴重的是近年來多次出現(xiàn)的漏洞問題,使得其名聲和使用率大降。這個時候Spring MVC框架成了新一代MVC框架的主流。它原生于Spring框架,可以無縫對接Spring的核心技術。與Struts不同,它的流程模塊化,沒有那么多臃腫的類,所以互聯(lián)網(wǎng)應用的框架大部分使用的是Spring MVC。
其次,目前企業(yè)的Java應用中,Spring框架是必須的,Spring的核心是IoC(控制反轉),它是一個大容器,方便組裝和管理各類系統(tǒng)內(nèi)外部資源,同時支持AOP(面向切面編程),這是對面向對象的補充,目前廣泛用于日志和數(shù)據(jù)庫事務控制,減少了大量的重復代碼,使得程序更為清晰。因為Spring可以使模塊解耦,控制對象之間的協(xié)作,所以Spring框架是目前Java最為流行的框架,幾乎沒有之一。
最后,對于Hibernate而言,筆者感慨最多,在需要存儲過程或者復雜SQL時,它的映射關系幾乎完全用不上,所有的問題都需要自己敲代碼處理。作為全映射的框架,它的致命缺點是沒有辦法完全掌控數(shù)據(jù)庫的SQL,而優(yōu)化SQL是高并發(fā)、高響應系統(tǒng)的必然要求,這是互聯(lián)網(wǎng)系統(tǒng)的普遍特性,所以Hibernate在互聯(lián)網(wǎng)系統(tǒng)中被排除了。而另一個持久層框架MyBatis,它需要編寫SQL、提供映射規(guī)則,不過它加入了動態(tài)SQL、自動映射、接口編程等功能使得它簡單易用,同時支持SQL優(yōu)化、動態(tài)綁定,并滿足高并發(fā)和高響應的要求,所以它成為最流行的Java互聯(lián)網(wǎng)持久框架。
NoSQL的成功在于,首先它是基于內(nèi)存的,也就是數(shù)據(jù)放在內(nèi)存中,而不是像數(shù)據(jù)庫那樣把數(shù)據(jù)放在磁盤上,而內(nèi)存的讀取速度是磁盤讀取速度的幾十倍到上百倍,所以NoSQL工具的速度遠比數(shù)據(jù)庫讀取速度要快得多,滿足了高響應的要求。即使NoSQL將數(shù)據(jù)放在磁盤中,它也是一種半結構化的數(shù)據(jù)格式,讀取到解析的復雜度遠比數(shù)據(jù)庫要簡單,這是因為數(shù)據(jù)庫存儲的是經(jīng)過結構化、多范式等有復雜規(guī)則的數(shù)據(jù),還原為內(nèi)存結構的速度較慢。NoSQL在很大程度上滿足了高并發(fā)、快速讀/寫和響應的要求,所以它也是Java互聯(lián)網(wǎng)系統(tǒng)的利器。于是兩種NoSQL的工具Redis和MongoDB流行起來,尤其是Redis已經(jīng)成為了主要的NoSQL工具,本書會詳細介紹它的常用方法。
基于以上原因,Spring+Spring MVC +MyBatis已經(jīng)成了Java互聯(lián)網(wǎng)時代的主流框架,而Redis緩存已經(jīng)成了主流的NoSQL技術,筆者愿意將自己所掌握的知識分享給大家,為目前奮斗在SSM和Redis戰(zhàn)線上的同行們奉獻一本有價值的參考書,給一些準備進入這個行業(yè)的新手一定的幫助和指導。
本書的特點
全書具備五大特點。
實用性:全書內(nèi)容來自于筆者多年互聯(lián)網(wǎng)實踐開發(fā)工作,理論結合實際應用。
理論性:突出基礎理念,結合設計模式闡述框架的實現(xiàn)原理和應用理念,讓讀者知其然也知其所以然。
與時俱進:介紹最新框架技術,與當前互聯(lián)網(wǎng)企業(yè)保持同步,比如全注解搭建SSM框架和Redis的應用,使得讀者能夠把最新技術應用到實際的工作中去。
突出熱點和重點:著重介紹MyBatis實踐應用,Spring數(shù)據(jù)庫及事務應用,使用Spring介紹Redis實踐應用、高并發(fā)和鎖等互聯(lián)網(wǎng)熱門技術的熱點和重點。
性能要求突出:這是移動互聯(lián)網(wǎng)的要求,因為互聯(lián)網(wǎng)面對大數(shù)據(jù)和高并發(fā),體現(xiàn)互聯(lián)網(wǎng)企業(yè)真實需要。
本書的內(nèi)容安排
本書基于一線企業(yè)的實際應用要求,介紹了Java互聯(lián)網(wǎng)最流行的框架技術,內(nèi)容全面,以實際應用為導向,取舍明確,尤其對于技術的重點、難點解釋得深入淺出,案例豐富,具體來說本書在體例上分為六大部分。
第1部分,首先講解基礎,讓讀者對SSM框架里的每一門技術的主要作用有所了解。然后介紹SSM框架的主要設計模式,它們有助于從底層深入理解框架。
第2部分,講解MyBatis的基礎應用,包括其主要組成、配置、映射器、動態(tài)SQL,并且深入MyBatis的底層運行原理和插件,詳細討論它們的高級應用。
第3部分,講解Spring IoC和Spring AOP。掌握Spring如何通過IoC管理資源,然后通過設計模式討論AOP的實現(xiàn)原理及其使用方法、實踐。討論Spring對數(shù)據(jù)庫的支持,如何整合MyBatis,并且著重討論了Spring數(shù)據(jù)庫事務的相關內(nèi)容,包括數(shù)據(jù)庫隔離級別和傳播行為的應用。
第4部分,講解Spring MVC主要的流程、HandlerMapping的應用、控制器Controller、處理適配器(HandlerAdapter)、視圖和視圖解析器,然后討論傳遞參數(shù)、注解、數(shù)據(jù)校驗、消息轉換和國際化等應用。
第5部分,掌握NoSQL的優(yōu)勢和應用方法,掌握Redis的常用數(shù)據(jù)類型和主要命令,以及一些基本的特性(比如事務)和用法,并教會你在Java和Spring環(huán)境中使用它。
第6部分,SSM框架+Redis的實戰(zhàn),通過全注解的方式搭建SSM框架,講解Redis應用,并展現(xiàn)了互聯(lián)網(wǎng)的核心問題——高并發(fā)和鎖的問題。介紹了通過悲觀鎖、樂觀鎖和Redis Lua語言方案來解決高并發(fā)和鎖的問題。
和讀者的約定
為了方便論述,我們進行以下約定。
import語句一般不出現(xiàn)在代碼中,主要是為了縮減篇幅,可以使用IDE自動導入,除非是筆者認為有必要的場景、一些重要的實例它才會出現(xiàn)在代碼中。
本書的例子大部分使用附錄A中的數(shù)據(jù)模型,附錄A中有基本的論述和對應的SQL語句。
對于普通的POJO,筆者大部分都會以“/**setter and getter**/”代替POJO的setter和getter方法,類似這樣:
public class Role {
private Long id;
private String roleName;
private String note;
/**setter and getter**/
}
讀者可以用IDE生成這些屬性的setter和getter方法,這樣做主要是為了節(jié)省篇幅,突出重點,也有利于讀者的閱讀。當然在一些特別重要的和使用廣泛的場景,比如MyBatis入門、SSM框架整合等場景才會給出全量代碼,以便讀者進行編碼學習。
在默認情況下,筆者使用互聯(lián)網(wǎng)最常用的MySQL數(shù)據(jù)庫,當使用其他數(shù)據(jù)庫時,筆者會事先加以說明。
本書采用MyBatis的版本是3.4.1,Spring的版本是4.3.2,Redis的版本是3.2.4,在實踐的過程中讀者需要注意版本之間的差異。
本書的目標讀者
閱讀本書,讀者要掌握以下知識:Java編程基礎、Java EE基礎(JSP、Servlet等)及數(shù)據(jù)庫基礎知識(本書以互聯(lián)網(wǎng)數(shù)據(jù)庫MySQL為主)。本書以互聯(lián)網(wǎng)企業(yè)最廣泛使用的技術框架為中心講解Java EE技術,從入門講解到實踐,適合有志于從事Java EE開發(fā)的各類人員閱讀,通過學習本書能夠有效提高技術能力,并且將知識點應用到實際的企業(yè)工作當中去。本書也可以作為大中專院校計算機專業(yè)的教材,幫助在校學生學習企業(yè)實際應用,當然你也可以把本書當作一本工作手冊進行查閱。
致謝
本書的成功出版,要感謝電子工業(yè)出版社的編輯們,沒有他們的辛苦付出,絕對沒有本書的成功出版,尤其是編輯汪達文,她啟發(fā)我創(chuàng)作本書,并且在寫作過程中給了我很多的建議和幫助,她為此付出了很多時間和精力。
在撰寫本書的過程中,得到了我的師兄周吉文的大力支持,他統(tǒng)稿了全書,也幫助我編寫了部分章節(jié)的內(nèi)容;同時還得到梁華輝和譚茂華兩位好友的協(xié)助,他們以過硬的技術為我排除了不少錯誤,同時也給了我很多很好的建議,并撰寫了一些很好的實例;還要感謝我的姐姐楊堅,她撰寫了部分內(nèi)容,并對書中那些晦澀難懂的句子進行了潤色,在此對他們的辛苦付出表示最誠摯的感謝。
互聯(lián)網(wǎng)技術博大精深,涉及的技術門類特別多,甚至跨行業(yè)也特別頻繁,技術更新較快。撰寫本書時筆者也遇到了一些困難,涉及的知識十分廣泛,對技術要求也更高,出錯的概率也大大增加,正如沒有完美的程序一樣,也沒有完美的書,一切都需要一個完善的過程,所以尊敬的讀者,如果對本書有任何意見或建議,歡迎發(fā)送郵件(ykzhen2013@163.com),或者在博客(http://blog.csdn.net/ykzhen2015)上留言,以便于本書的修訂。
楊開振
2017年6月
楊開振,擁有十余年一線Java開發(fā)工作經(jīng)驗,熱衷于Java互聯(lián)網(wǎng)技術方向研究,目前從事Java互聯(lián)網(wǎng)技術在線教育,著有暢銷書《深入淺出MyBatis技術原理與實戰(zhàn)》。
周吉文,高級工程師,曾獲廣東省科技進步一等獎,曾任國家“863”計劃項目軟件組組長,擔任珠海市第二人民醫(yī)院信息部主任多年,有豐富的項目實施和管理經(jīng)驗。
梁華輝,資深Java開發(fā)專家,有豐富的企業(yè)級應用及Web項目的開發(fā)經(jīng)驗。對軟件設計模式和代碼整潔方面有深入理解,對Spring、Hibernate等主流開源框架有深入研究。
譚茂華,資深Java開發(fā)專家,擁有十余年供應鏈管理、金融、物聯(lián)網(wǎng)等行業(yè)大型系統(tǒng)軟件開發(fā)經(jīng)驗。熱衷于軟件架構、軟件研發(fā)過程控制、Java開源技術(尤其是Spring體系技術)的研究。
第1部分 入門和技術基礎
第1章 認識SSM框架和Redis 2
1.1 Spring框架 2
1.2 MyBatis簡介 6
1.3 Spring MVC簡介 11
1.4 最流行的NoSQL——Redis 12
1.5 SSM+Redis結構框圖及概述 13
第2章 Java設計模式 15
2.1 Java反射技術 15
2.2 動態(tài)代理模式和責任鏈模式 19
2.3 觀察者(Observer)模式 30
2.4 工廠模式和抽象工廠模式 35
2.5 建造者(Builder)模式 38
2.6 總結 41
第2部分 互聯(lián)網(wǎng)持久框架——MyBatis
第3章 認識MyBatis核心組件 44
3.1 持久層的概念和MyBatis的特點 44
3.2 準備MyBatis環(huán)境 45
3.3 MyBatis的核心組件 46
3.4 SqlSessionFactory(工廠接口) 47
3.5 SqlSession 50
3.6 映射器 51
3.7 生命周期 55
3.8 實例 57
第4章 MyBatis配置 63
4.1 概述 63
4.2 properties屬性 64
4.3 settings設置 66
4.4 typeAliases別名 69
4.5 typeHandler類型轉換器 72
4.6 ObjectFactory(對象工廠) 87
4.7 插件 89
4.8 environments(運行環(huán)境) 89
4.9 databaseIdProvider數(shù)據(jù)庫廠商標識 95
4.10 引入映射器的方法 99
第5章 映射器 102
5.1 概述 102
5.2 select元素——查詢語句 103
5.3 insert元素——插入語句 112
5.4 update元素和delete元素 114
5.5 sql元素 115
5.6 參數(shù) 116
5.7 resultMap元素 118
5.8 級聯(lián) 120
5.9 緩存 143
5.10 存儲過程 149
第6章 動態(tài)SQL 155
6.1 概述 155
6.2 if元素 156
6.3 choose、when、otherwise元素 156
6.4 trim、where、set元素 157
6.5 foreach元素 159
6.6 用test的屬性判斷字符串 159
6.7 bind元素 160
第7章 MyBatis的解析和運行原理 162
7.1 構建SqlSessionFactory過程 163
7.2 SqlSession運行過程 168
第8章 插件 181
8.1 插件接口 181
8.2 插件的初始化 182
8.3 插件的代理和反射設計 183
8.4 常用的工具類——MetaObject 186
8.5 插件開發(fā)過程和實例 187
8.6 總結 205
第3部分 Spring基礎
第9章 Spring IoC的概念 208
9.1 Spring的概述 208
9.2 Spring IoC概述 210
9.3 Spring IoC容器 215
9.4 小結 223
第10章 裝配Spring Bean 224
10.1 依賴注入的3種方式 224
10.2 裝配Bean概述 227
10.3 通過XML配置裝配Bean 228
10.4 通過注解裝配Bean 235
10.5 裝配的混合使用 246
10.6 使用Profile 249
10.7 加載屬性(properties)文件 254
10.8 條件化裝配Bean 258
10.9 Bean的作用域 259
10.10 使用Spring表達式(Spring EL) 261
第11章 面向切面編程 267
11.1 一個簡單的約定游戲 267
11.2 Spring AOP的基本概念 274
11.3 使用@AspectJ注解開發(fā)Spring AOP 280
11.4 使用XML配置開發(fā)Spring AOP 293
11.5 經(jīng)典Spring AOP應用程序 299
11.6 多個切面 301
11.7 小結 306
第12章 Spring和數(shù)據(jù)庫編程 307
12.1 傳統(tǒng)的JDBC代碼的弊端 307
12.2 配置數(shù)據(jù)庫資源 309
12.3 JDBC代碼失控的解決方案——jdbcTemplate 311
12.4 MyBatis-Spring項目 317
第13章 深入Spring數(shù)據(jù)庫事務管理 330
13.1 Spring數(shù)據(jù)庫事務管理器的設計 331
13.2 編程式事務 336
13.3 聲明式事務 337
13.4 數(shù)據(jù)庫的相關知識 343
13.5 選擇隔離級別和傳播行為 347
13.6 在Spring+MyBatis組合中使用事務 350
13.7 @Transactional的自調(diào)用失效問題 358
13.8 典型錯誤用法的剖析 363
第4部分 Spring MVC框架
第14章 Spring MVC的初始化和流程 370
14.1 MVC設計概述 370
14.2 Spring MVC初始化 378
14.3 Spring MVC開發(fā)流程詳解 389
第15章 深入Spring MVC組件開發(fā) 399
15.1 控制器接收各類請求參數(shù) 399
15.2 重定向 409
15.3 保存并獲取屬性參數(shù) 412
15.4 攔截器 417
15.5 驗證表單 424
15.6 數(shù)據(jù)模型 432
15.7 視圖和視圖解析器 434
15.8 上傳文件 441
第16章 Spring MVC高級應用 449
16.1 Spring MVC的數(shù)據(jù)轉換和格式化 449
16.2 為控制器添加通知 466
16.3 處理異常 470
16.4 國際化 471
第5部分 Redis應用
第17章 Redis概述 480
17.1 Redis在Java Web中的應用 481
17.2 Redis基本安裝和使用 483
17.3 Redis的Java API 486
17.4 簡介Redis的6種數(shù)據(jù)類型 494
17.5 Redis和數(shù)據(jù)庫的異同 495
第18章 Redis數(shù)據(jù)結構常用命令 496
18.1 Redis數(shù)據(jù)結構——字符串 497
18.2 Redis數(shù)據(jù)結構——哈希 502
18.3 Redis數(shù)據(jù)結構——鏈表(linked-list) 506
18.4 Redis數(shù)據(jù)結構——集合 513
18.5 Redis數(shù)據(jù)結構——有序集合 516
18.6 基數(shù)——HyperLogLog 522
第19章 Redis的一些常用技術 525
19.1 Redis的基礎事務 526
19.2 探索Redis事務回滾 528
19.3 使用watch命令監(jiān)控事務 529
19.4 流水線(pipelined) 532
19.5 發(fā)布訂閱 534
19.6 超時命令 538
19.7 使用Lua語言 540
19.8 小結 547
第20章 Redis配置 548
20.1 Redis基礎配置文件 548
20.2 Redis備份(持久化) 549
20.3 Redis內(nèi)存回收策略 552
20.4 復制 553
20.5 哨兵(Sentinel)模式 556
第21章 Spring緩存機制和Redis的結合 565
21.1 Redis和數(shù)據(jù)庫的結合 565
21.2 使用Spring緩存機制整合Redis 568
21.3 RedisTemplate的實例 582
第6部分 SSM框架+Redis實踐應用
第22章 高并發(fā)業(yè)務 586
22.1 互聯(lián)系統(tǒng)應用架構基礎分析 586
22.2 高并發(fā)系統(tǒng)的分析和設計 588
22.3 搭建搶紅包開發(fā)環(huán)境和超發(fā)現(xiàn)象 595
22.4 悲觀鎖 611
22.5 樂觀鎖 614
22.6 使用Redis實現(xiàn)搶紅包 621
22.7 各類方式的優(yōu)缺點 631
附錄A 數(shù)據(jù)庫表模型 633
附錄B DispatcherServlet流程源碼分析 637
附錄C JSTL常用標簽 648
附錄D spring data redis項目分析 660
你還可能感興趣
我要評論
|