Spring框架的最佳實踐_第1頁
Spring框架的最佳實踐_第2頁
Spring框架的最佳實踐_第3頁
Spring框架的最佳實踐_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、Spring框架的最佳實踐 Java程序員可以從Spring框架中學(xué)習(xí)的3個最佳實踐看一看Spring的源代碼,你便可以看到設(shè)計spring框架的構(gòu)思。我們從Spring中尋找到一些最佳實踐可 供Java開發(fā)人員學(xué)習(xí)。導(dǎo)讀毫無疑問,Spring Framework是最流行的Java框架之一,并且通過提供諸如依賴注入和控制反轉(zhuǎn)等特性,使得創(chuàng)建真實的企業(yè)級Java應(yīng)用程序變得非常簡單。但說實話,Spring不僅僅是一個DI和IOC框架。通過提供一個有用的抽象層,它可以進(jìn)一步簡化許多Java的API,例如JDBC,JMS,Java Mail等。用了Spring的JdbcTempalte和其他實用程序

2、類會讓JDBC的開發(fā)工作變得非常簡單。它們消除了Java開發(fā)人員在執(zhí)行SQL語句和處理ResultSets以獲取他 們想要的Java對象方面所面臨的大部分障礙。所以,當(dāng)你學(xué)習(xí)Spring的時候,你不僅可以學(xué)會如何使用它,還可以學(xué)到一些關(guān)于“如何用Java編寫更好的代碼”和“從整體視角進(jìn)行面向?qū)ο缶幊獭钡膶嵱盟枷搿T诒疚闹?,我將分享我在學(xué)習(xí)Spring時遇到的一些最佳實踐,主要來源于閱讀Craig Walls經(jīng)典的Spring in Action一書以及我個人對Spring的經(jīng)驗。這本書對我有特別巨大的影響,因為Craig優(yōu)秀的寫作風(fēng)格和他在spring中解釋每一個概念的方式(都讓我學(xué)到很多)。

3、如果你還沒有閱讀,我強(qiáng)烈將其推薦給你 - 這是完全值得你付出時間和金錢去學(xué)習(xí)的。說到這,就不再過多浪費你的時間了,我準(zhǔn)備了三個我學(xué)到的最佳實踐給大家,并建議每個Java程序員都要意識到它并在Java編寫代碼時應(yīng)用它。面向接口編程這是我在閱讀Head First Design Patterns時首先學(xué)習(xí)的一個舊的OOP指南。這種OOP設(shè)計原則的主要目的是減少兩類之間的耦合,從而提高靈活性。Spring嚴(yán)格遵循這一面向?qū)ο蟮臏?zhǔn)則,并經(jīng)常公開接口給關(guān)鍵類,例如,特意創(chuàng)建JdbcOperation接口用以實現(xiàn)JdbcTemplate(譯者:查看源碼 public class JdbcTemplate

4、extends JdbcAccessor implements JdbcOperations)。這種做法促進(jìn)了不同層之間的松散耦合。另一個很好的例子是一個Cache接口,它被用來提供緩存。所有其他緩存實現(xiàn)(例如EhCache,ConcurrentMapCache和NoOpCache)都實現(xiàn)此接口。如果您的代碼依賴于緩存接口而不是任何特定的實現(xiàn),則可以切換緩存提供程序而不影響代碼的其他部分。下面是使用Collection框架演示的一個“java中面向接口編程”的簡單代碼示例。如果仔細(xì)觀察,在本例 中,我使用了一個接口而不是具體實現(xiàn)來聲明Java中的變量,參數(shù)和返回類型的方法。import jav

5、a.util.Arrays; import java.util.List;import java.util.stream.Collectors;/*Program to demonstrate coding for interfaces in Javaauthor WINDOWS 8*/public class Hello public static void main(String args) / Using interface as variable typesList rawMessage = Arrays.asList(one, two, three); List allcaps =

6、toCapitalCase(rawMessage); System.out.println(allcaps);/* Using Interface as type of argument and return type*/public static List toCapitalCase(List messages) return messages.stream().map(String:toUpperCase).collect(Collectors.toList();這種編碼風(fēng)格是靈活的,并且在未來更容易改變。偏愛定義Unchecked Exceptions(相比于Checked Excepi

7、tons)如果您使用過Spring Framework,那么您已經(jīng)注意到Spring支持在Checked Exceptions之上定義Unchecked Exceptions,最好的例子就是Spring JDBC。Spring具有豐富的異常層次結(jié)構(gòu)來描述從數(shù)據(jù)庫連接和檢索數(shù)據(jù)時可能會遇到的不同錯誤,但它們的根源是DataAccessException,而它是未經(jīng)檢查的(Unchecked Exceptions)。Spring認(rèn)為大多數(shù)錯誤都源于無法在catch塊中糾正的原因,因此它決定讓開發(fā)人員捕獲該異常,而不是像Java那樣強(qiáng)制進(jìn)入它。結(jié)果是更干凈的代碼,沒有空的catch塊和更少的try-

8、catch塊。這也是在處理Java中的錯誤和異常時的最佳實踐之一。如果您對該主題感興趣,那么您也可以查看我的10 Java Exception best practice以獲取更多建議。 PAGE 61譯者補(bǔ)充:對比DataAccessException,下方代碼的FileNotFoundException是Checked Excepitons,出現(xiàn)時只能try/catch捕獲或向上拋出,為了避免這樣的麻煩所以“偏愛”Unchecked Exceptions。File file = new File(aaaa); try FileInputStream fis = new FileInputS

9、tream(file); catch (FileNotFoundException e) / TODO Auto-generated catch block e.printStackTrace();譯者提醒:那么Unchecked Exceptions 的好處是什么呢?運行時異常(即未經(jīng)檢查的異常Unchecked Exceptions )發(fā)生時會自動強(qiáng)制執(zhí)行整個邏輯工作單元的回滾,Spring的這個特性可以讓開發(fā)者自定義特定異常并在合適的位置拋出,從而更容易地發(fā)現(xiàn)并改正問題。 (另Unchecked Exceptions 和 Checked Exceptions 作為研究對象在譯文中不做翻譯

10、)使用模板設(shè)計模式Spring大量使用模板方法設(shè)計模式來簡化事情。一個很好的例子就是JdbcTemplate,它在使用JDBC API的時候帶走了很多痛苦。您只需要定義它需要的內(nèi)容,Spring會處理剩下的進(jìn)程??赡苣€不知道,模板模式會定義一個流程或算法,您雖無法更改此流程,但同時您可以根據(jù)自己的需求自定義步驟。例如,在處理JDBC時,可以使用JdbcTemplate執(zhí)行查詢并獲取所需的對象。您只需提供SQL,這在每 種情況下(的實現(xiàn))都是不同的,一樣需要映射邏輯以將表中的行數(shù)據(jù)和對象一一對應(yīng)起來。這是一個很好的圖表,很好地解釋了模板模式。你可以看到每個人都有一些共同的任務(wù),但是他們做了不同的工作,并且很好地被Template方法捕獲。他們所需要做的就是定義他們的工作,通過自定義實現(xiàn)work()的抽象方法。除了JdbcTemplate之外,您還可以在整個Spring框架的API中找到很多其他的Template Method Pattern示例,例如JmsTemplate和RestTemplate,它們允許您從Java應(yīng)用程序中使用REST API。這就是你可以從Spring學(xué)到的一些Java最佳實踐。Spring是一個很好的框架,他們的作者都是有經(jīng)驗的Java

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論