《Spring In Action》第三版中文版 Chapter 1 Piece 2

版權與免責聲明:本博客文章翻譯自《Spring in action》第三版,原書版權歸原做者及其出版單位全部,本人僅出於我的興趣,翻譯其中內容。本人不以盈利爲目的,放置在博客中僅爲了方便網友閱讀原做遇到困難時參考。本人嚴正聲明,本人並不擁有翻譯該做品之正當權力,所以嚴禁他人轉載,亦不保證做品之正確性;如侵犯您的權益,望告知,即行關閉。java

翻譯聲明:本人目前計劃天天翻譯兩頁,且不作任何工期承諾,以前未在網上發現相似內容,如已有類似內容,望告知,也免得我翻譯了。spring

Bean不是惟一的稱呼…… 儘管Spring大量地使用單詞beanJavaBean來指代應用程序組件,可是不要望文生義地覺得一個Spring組件就必須遵循JavaBeans規範。一個Spring組件能夠是任何形式的POJO。在本書中,我採用廣義上的JavaBean,即POJO的同義詞。編程

縱覽本書,你將發現,Spring神通廣大。可是支撐Spring絕大部分功能的根基實際上是少量基本理念,它們專一於Spring的基本任務:簡化Java開發。設計模式

這是一份莊重的承諾!不少框架都聲稱簡化這樣或那樣的事情,可是Spring致力於全方位地簡化Java開發。這有待於細細解釋。Spring是如何簡化Java開發的?session

爲了下降Java的複雜性,Spring採起了如下四項核心策略:框架

·        採用普通簡單Java對象(POJO)保持輕量級和最低限度侵入開發測試

·        經過依賴注入和麪向接口下降耦合spa

·        經過切面和慣例進行聲明式編程翻譯

·        經過切面和模板減小冗餘設計

Spring所作的幾乎一切事情均可以追溯到上述一個或多個策略。在本章的其餘部分,我將對這些理念展開論述,並經過具體實例展示Spring是如何較好地兌現簡化Java開發這一承諾的。咱們先來看一看Spring是如何經過鼓勵面向POJO開發來保持最低限度侵入的。

1.1.1    激發POJO的潛能

若是你是Java開發的老手,你或許見過(甚至使用過)這樣的框架,它們強迫你去擴展它們提供的類,或實現它們的接口,從而將你牢牢束縛住。下面這個經典的示例,是EJB-2時代的無狀態會話bean。從這個繁瑣的HelloWorldBean中你能夠發現,EJB2規範實在是太過於臃腫了。

package com.habuma.ejb.session;

import javax.ejb.SessionBean;

import javax.ejb.SessionContext;

public class HelloWorldBean implements SessionBean {

public void ejbActivate() {

}

public void ejbPassivate() {

}

public void ejbRemove() {

}

public void setSessionContext(SessionContext ctx) {

}

public String sayHello() {

return "Hello World";

}

public void ejbCreate() {

}

}


SessionBean接口容許你經過實現若干生命週期回調方法(這些方法以ejb打頭),嵌入EJB的生命週期內。或許我應該這麼說,SessionBean接口強迫你嵌入EJB的生命週期內,即使你不須要。HelloWorldBean中的大段代碼僅僅是爲了知足框架的須要。那麼問題是:到底誰在爲誰服務?

EJB2的侵入式特性並不是特例。其餘流行框架,好比StrutsWebWorkTapestry的早期版本也都和其餘簡單Java類糾纏不清(imposed themselves upon otherwise simple Java classes)。這些重量級框架,強迫開發者編寫混雜了冗餘代碼的類,這些類被束縛在框架之中,一般也很難編寫相應的測試。

Spring竭力避免讓你的應用程序代碼與它的API相混雜。Spring幾乎從不強制你實現一個Spring接口,或者擴展一個Spring類。事實上,基於Spring的應用程序中的類一般沒有跡象顯示它們正在被Spring所使用。最壞的狀況下,一個類或許加註了Spring的註解,但它仍舊是一個POJO

爲了闡明這一點,若是清單1.1中展現的HelloWorldBean要被重寫爲Spring管理的bean,它看起來可能會是這樣:

package com.habuma.spring;

public class HelloWorldBean {

public String sayHello() {

return "Hello World";

}

}

難道不是好得多嗎?那些惱人的生命週期方法都不見了。HelloWorldBean沒有實現、擴展或者導入任何Spring API的內容。HelloWorldBean是簡練的,清晰的,總的來講,是一個普通簡單Java對象。

POJO形式縱然簡單,但功能能夠很是強大。Spring強化POJO的方法之一就是使用依賴注入。讓咱們看看依賴注入是如何幫助應用程序的對象彼此解耦的。

1.1.2    注入依賴關係

依賴注入這個詞讓人望而生畏,它成爲了一項複雜的編程技巧或設計模式的理念。可是事實證實,依賴注入(DI)並無聽上去那麼複雜。

相關文章
相關標籤/搜索