1. 程式人生 > >《架構探險——從零開始寫Java Web框架》 讀書筆記

《架構探險——從零開始寫Java Web框架》 讀書筆記

由於囤書,近期終於把很早之前買的《架構探險——從零開始寫Java Web框架》讀完,記錄下筆記,把一些有意思並且需要鞏固的,拿出來分享給大家。

涉及內容:開發思路、IoC與DI、AOP、事務的4種隔離級別、框架推薦(Apache Shiro、Apache CXF)

第一章

進一步瞭解了下,在IDEA搭建一個專案

第二章

需求分析及開發過程,這個可以看到別人的開發思路,挺有收穫的。
需求分析及開發過程

i. 需求分析

需求分析也稱為軟體需求分析、系統需求分析或需求分析工程等,是開發人員經過深入細緻的調研和分析,準確理解使用者和專案的功能、效能、可靠性等具體要求,將使用者非形式的需求表述轉化為完整的需求定義,從而確定系統必須做什麼的過程。

ii. 設計用例

用例(英語:use case),或譯使用案例、用況,是軟體工程或系統工程中對系統如何反應外界請求的描述,是一種通過使用者的使用場景來獲取需求的技術。每個用例提供了一個或多個場景,該場景說明了系統是如何和終端使用者或其它系統互動,也就是誰可以用系統做什麼,從而獲得一個明確的業務目標。

第三章

搭建輕量級Java Web框架,個人覺得以下 內容 會比 書上更加清晰一些,大神還是挺多的。

1. IoC(控制反轉)–from Bromon

首先說說IoC(Inversion of Control,控制反轉)。這是spring的核心,貫穿始終。所謂IoC,對於spring框架來說,就是由spring來負責控制物件的生命週期和物件間的關係。

這是什麼意思呢,舉個簡單的例子,我們是如何找女朋友的?常見的情況是,我們到處去看哪裡有長得漂亮身材又好的mm,然後打聽她們的興趣愛好、qq號、電話號、ip號、iq號………,想辦法認識她們,投其所好送其所要,然後嘿嘿……這個過程是複雜深奧的,我們必須自己設計和麵對每個環節。傳統的程式開發也是如此,在一個物件中,如果要使用另外的物件,就必須得到它(自己new一個,或者從JNDI中查詢一個),使用完之後還要將物件銷燬(比如Connection等),物件始終會和其他的介面或類藕合起來。  
那麼IoC是如何做的呢?有點像通過婚介找女朋友,在我和女朋友之間引入了一個第三者:婚姻介紹所。婚介管理了很多男男女女的資料,我可以向婚介提出一個列表,告訴它我想找個什麼樣的女朋友,比如長得像李嘉欣,身材像林熙雷,唱歌像周杰倫,速度像卡洛斯,技術像齊達內之類的,然後婚介就會按照我們的要求,提供一個mm,我們只需要去和她談戀愛、結婚就行了。簡單明瞭,如果婚介給我們的人選不符合要求,我們就會丟擲異常。整個過程不再由我自己控制,而是有婚介這樣一個類似容器的機構來控制。Spring所倡導的開發方式
就是如此,所有的類都會在spring容器中登記,告訴spring你是個什麼東西,你需要什麼東西,然後spring會在系統執行到適當的時候,把你要的東西主動給你,同時也把你交給其他需要你的東西。所有的類的建立、銷燬都由spring來控制,也就是說控制物件生存週期的不再是引用它的物件,而是spring。對於某個具體的物件而言,以前是它控制其他物件,現在是所有物件都被spring控制,所以這叫控制反轉。

2. DI(依賴注入)–from Bromon

IoC的一個重點是在系統執行中,動態的向某個物件提供它所需要的其他物件。這一點是通過DI(Dependency Injection,依賴注入)來實現的。比如物件A需要操作資料庫,以前我們總是要在A中自己編寫程式碼來獲得一個Connection物件,有了spring我們就只需要告訴spring,A中需要一個Connection,至於這個Connection怎麼構造,何時構造,A不需要知道。在系統執行時,spring會在適當的時候製造一個Connection,然後像打針一樣,注射到A當中,這樣就完成了對各個物件之間關係的控制。A需要依賴 Connection才能正常執行,而這個Connection是由spring注入到A中的,依賴注入的名字就這麼來的。那麼DI是如何實現的呢?
Java 1.3之後一個重要特徵是反射(reflection),它允許程式在執行的時候動態的生成物件、執行物件的方法、改變物件的屬性,spring就是通過反射來實現注入的。

3. IoC和DI–from Acrash

控制反轉IoC(Inversion of Control)是說建立物件的控制權進行轉移,以前建立物件的主動權和建立時機是由自己把控的,而現在這種權力轉移到第三方,比如轉移交給了IoC容器,它就是一個專門用來建立物件的工廠,你要什麼物件,它就給你什麼物件,有了 IoC容器,依賴關係就變了,原先的依賴關係就沒了,它們都依賴IoC容器了,通過IoC容器來建立它們之間的關係。
IoCDI由什麼關係呢?其實它們是同一個概念的不同角度描述,由於控制反轉概念比較含糊(可能只是理解為容器控制物件這一個層面,很難讓人想到誰來維護物件關係),所以2004年大師級人物Martin Fowler又給出了一個新的名字:“依賴注入”,相對IoC 而言,“依賴注入”明確描述了“被注入物件依賴IoC容器配置依賴物件”。

4. 深入淺出spring IOC中四種依賴注入方式–from 王小汪O_o
  • a、介面注入;
  • b、setter方法注入;
  • c、構造方法注入;
  • d、註解方法注入;

ps.王小汪O_o 的blog上 有詳細例子,我就不一一累述了。

第四章

1. AOP

複習一下吧,書上的內容不方便放出來,找了 以下的分享 給大家。

  • a、為什麼需要代理模式
  • b、靜態代理
  • c、動態代理,使用JDK內建的Proxy實現
  • d、動態代理,使用cglib實現
  • e、使用Spring實現AOP
  • f、使用IOC配置的方式實現AOP
  • g、使用XML配置Spring AOP切面
2. 事務的4種隔離級別
事隔離級別 髒讀 不可重複讀 幻讀
READ_UNCOMITTED 允許 允許 允許
READ_COMMITTED 禁止 允許 允許
REPEATABLE_READ 禁止 禁止 允許
SERIALIZABLE 禁止 禁止 禁止

READ UNCOMMITTED(讀未提交資料):允許事務讀取未被其他事務提交的變更資料,會出現髒讀、不可重複讀和幻讀問題。
READ COMMITTED(讀已提交資料):只允許事務讀取已經被其他事務提交的變更資料,可避免髒讀,仍會出現不可重複讀和幻讀問題。
REPEATABLE READ(可重複讀):確保事務可以多次從一個欄位中讀取相同的值,在此事務持續期間,禁止其他事務對此欄位的更新,可以避免髒讀和不可重複讀,仍會出現幻讀問題。
SERIALIZABLE(序列化):確保事務可以從一個表中讀取相同的行,在這個事務持續期間,禁止其他事務對該表執行插入、更新和刪除操作,可避免所有併發問題,但效能非常低。

Oracle支援兩種事務隔離級別:
READ COMMITTED(預設事務隔離級別),SERIALIZABLE

MySQL支援四種事務隔離級別:
REPEATABLE READ(預設事務隔離級別)

定義:
存在兩個事物(T1,T2)同時執行,
髒讀:讀取到了未提交的資料。T1讀取了已經被T2修改但還未提交的欄位,由於某種原因,T2事物回滾,則T1讀取的內容是臨時且無效的。
不可重複讀:不可重複讀意味著我們在同一個事務中執行完全相同的select語句時可能看到不一樣的結果。T1讀取一個欄位,之後T2更新了該欄位,T1在此讀取該欄位值發生了變化。
幻讀:當用戶讀取某一範圍的資料行時,另一個事務又在該範圍內插入了新行,當用戶再讀取該範圍的資料行時,會發現有新的“幻影” 行。如T1從一個表中讀取了一個欄位,然後T2在該表中插入了一些新的行,之後T1在此讀取該表會多出幾行。

第五章

框架優化與功能擴充套件
推薦了 Apache Shiro 和 Apache CXF。

Apache Shiro

Apache Shiro is a powerful and easy-to-use Java security framework that performs authentication, authorization, cryptography, and session management. With Shiro’s easy-to-understand API, you can quickly and easily secure any application – from the smallest mobile applications to the largest web and enterprise applications.

Apache Shiro 是一個功能強大且易於使用的Java安全框架,可執行身份驗證,授權,加密和會話管理。 藉助Shiro易於理解的API,您可以快速輕鬆地保護任何應用程式 - 從最小的移動應用程式到最大的Web和企業應用程式。

Apache CXF

Apache CXF is an open source services framework. CXF helps you build and develop services using frontend programming APIs, like JAX-WS and JAX-RS. These services can speak a variety of protocols such as SOAP, XML/HTTP, RESTful HTTP, or CORBA and work over a variety of transports such as HTTP, JMS or JBI.

Apache CXF是一個開源服務框架。 CXF使用前端程式設計API(如JAX-WS和JAX-RS)幫助您構建和開發服務。 這些服務可以使用各種協議,例如SOAP,XML / HTTP,RESTful HTTP或CORBA,並且可以在各種傳輸上工作,例如HTTP,JMS或JBI。

相關推薦

架構探險——開始Java Web框架讀書筆記

由於囤書,近期終於把很早之前買的《架構探險——從零開始寫Java Web框架》讀完,記錄下筆記,把一些有意思並且需要鞏固的,拿出來分享給大家。 涉及內容:開發思路、IoC與DI、AOP、事務的4種隔離級別、框架推薦(Apache Shiro、Apache CX

架構探險——開始Java Web框架》 試讀——感想

《架構探險——從零開始寫Java Web框架》 試讀感想          宣告:         本篇文章在iteye上發表的也是我本人的號。所以不存在未經作者允許非法轉載的事。為了證明,我擷取登

架構探險開始Java Web框架》讀後感

講真,該書利用一個小專案引導讀者從零開始手把手的搭建了一個Java Web框架,一個類Spring框架,重複造了輪子;但能幫助初學的讀者瞭解常用框架的底層原理。書中堆了很多程式碼,html程式碼也有,

讀書雜談-《架構探險開始Java Web框架

        愛買書,雖然讀書懶惰的很,但最近還是陸陸續續的買了五六本書的樣子,包括:核心技術、深入虛擬機器、併發程式設計等,這些書中我能讀的進去,且通俗易懂的當屬這本黃勇寫的《架構探險:從零開始寫Java Web框架》。         這本書的特點是大量的程式碼,通俗的

[筆記]架構探險-開始JavaWeb框架-1. 之搭建輕量級mvc框架

囉嗦一句: 看md語法寫的文章,注意檢視 上面 的目錄. 一般是很有節奏的導航. ヽ(ˋ▽ˊ)ノヽ(ˋ▽ˊ)ノ 終於到了不會的地步了,該書的前面兩章節都是從零開始講解怎麼使用 idea搭建專案,從servlet開始講解怎麼使用. (idea的使用目錄)

架構探險-開始Javaweb框架讀書筆記(5)

AOP實現 AOP(Aspect Oriented Programming,面向切面程式設計);用來不改變程式碼的情況下在方法前後加入效能監控,日誌列印等等。 依照慣例,有時spring aop的實現過程 advice 直譯為通知 黃勇老師

[筆記]架構探險-開始JavaWeb框架-2.1. 之使框架具有aop特性-aop框架載入與切面執行流程分析

囉嗦一句:本筆記只是自己在學習過程中的一些分析和理解,看的人不一定能看懂.如果有興趣還是去買這本書看.筆記就當是另外一種解說好了 在本章節中會學習到如下的技術: 如何理解並使用代理技術 如何使用Spring提供的AOP技術(忽略,太多知識) 如何使

【溫故知新】開始搭建 java web項目(二)

添加 以及 pro tps ren 處理方法 獲取 mapping 映射 系列一介紹了新建一個 web 項目的基本步驟,系列二就準備介紹下基本的 jsp 和 servlet 使用。 (關於jsp的編譯指令、動作指令、內置對象不在本文討論範圍之內) 1. 首先,在 pom.

騰訊雲centos7.0 開始搭建Java Web網站

本文的目的是記錄自己個人網站的搭建過程,同時達到知識共享的目的。其實自己動手做的時候會遇到很多問題,也是通過網站查詢資料來一步一步的完成自己的搭建工作的,重要的是自己能夠堅持的做下去,希望能夠在自

開始C# MVC框架之--- 配置log4日誌

寫入 出錯 fill 文件 幫助 fontsize att 日誌處理 引用 在框架中配置日誌分2步,一個是在幫助項目Zy.Utilities--Zy.Utility.Core中新建log類,封裝寫入日誌方法,還需要在Zy.Utility.Core添加 log4net 的引用

開始C# MVC框架之--- 專案結構

框架總分2個專案:Web開發專案、幫助類專案 (ZyCommon、Zy.Utilities)       1、ZyCommon,是Web開發專案結構。新建一個空解決方案,再建Data、Service、ZyWeb解決方案資料夾,把資料層、介面服務層、Web層區分開    

開始C# MVC框架之--- 用autofac ioc 容器實現依賴注入

本章查找了一篇對依賴注入解釋得非常不錯的文章為基礎,再加上自己的理解,不然還真不好用語言的方式表達清楚,引用下面這位仁兄的文章 依賴注入產生的背景:         隨著面向物件分析與設計的發展,一個良好的設計,核心原則之一就是將變化隔離,使得變化部分發生變化時,不變部

開始C# MVC框架之--- 資料庫表設計

怎麼在專案中使用Code First?  1、設計好資料庫表實體類,欄位--繫結對應屬性(是否非空,長度限制等),繫結到上下文基類中  2、使用Migrations遷移報告,把表生成到資料庫中 拿專案中的使用者表做演示: 詳細操作如下, 1.1、在Zy.Xn.Model專

開始理解JAVA事件處理機制(2)

extend nds 接下來 htm ref param 簡單 tostring ansi 第一節中的示例過於簡單《從零開始理解JAVA事件處理機制(1)》,簡單到讓大家覺得這樣的代碼簡直毫無用處。但是沒辦法,我們要繼續寫這毫無用處的代碼,然後引出下一階段真正有益的代碼。

[Golang] 開始Socket Server(3): 對長、短連接的處理策略(模擬心跳)

microsoft ted 每次 range 點擊 關閉 ade 而在 href 通過前兩章,我們成功是寫出了一套湊合能用的Server和Client,並在二者之間實現了通過協議交流。這麽一來,一個簡易的socket通訊框架已經初具雛形了,那麽我們接下來做的

如何開始Java編程

零基礎 簡單的 核心技術 為什麽 而且 log 更多 課程 比較 Java語言的學習開始,很多同學不知道從哪入手?如果你也想知道如何從零開始學Java?怎樣學Java最有效? 雖然Java面象對象很多東西都是被封裝好的直接用,相對其他語言沒那麽復雜,但是學的東西也沒有那麽的

開始JavaWeb框架(第二章節)

oca ext span logs http ioe 請求方法 servlet 類型 這一章太多了。。。好累,不想寫那麽細了,就做一點總結吧。 package org.smart4j.chapter2.controller; import java.io.IOExcep

開始STL-容器-雙端隊列

這一 偏移 nis log index end ref 分配 locate 從零開始寫STL-容器-雙端隊列 什麽是雙端隊列?在介紹vector源碼,我們發現在vector前端插入元素往往會引起大量元素的重新分配,雙端隊列(deque)就是為了解決這一問題,雙端隊列中在首

開始STL—functional

binder 保存 函數調用 mark 獲取 AR ref 返回 log function C++11 將任意類型的可調用(Callable)對象與函數調用的特征封裝到一起。 這裏的類是對函數策略的封裝,將函數的性質抽象成組件,便於和algorithm庫配合使用 基本運

Maven系列(一)開始構建Java應用程序

.so 構建java項目 cti maven生命周期 包含 兩個類 簡述 work pil 前段時間面試,面試官要我簡述一下Maven生命周期,what?Maven不就是用來構建一個項目的麽,生命周期是什麽東東(我之前一直做.net,但是想找關於java的工作,之前使用Ma