《Spring實戰》第一章 — Spring之旅

1.1 使用Spring簡化Java開發

    爲了下降Java開發,Spring使用了一下4種關鍵策略:數據庫

  • 基於POJO的輕量級和最小侵入性編程;
  • 經過依賴注入和麪向接口實現鬆耦合;
  • 基於切面和管理進行聲明式編程;
  • 經過切面和模版減小樣板式代碼;

1.1.1 激發POJO的潛能

    Spring竭力避免因自身的API而弄亂你的代碼。不會強迫你去實現Spring規範的接口或繼承Spring規範的類,相反,它的類一般沒有任何痕跡表名你使用了Spring。最壞的場景是,一個類或許會使用Spring的註解,但它仍然是POJO。編程

1.1.2 依賴注入(DI)

    任何一個有實際意義的應用都會由兩個或者更多的類組合,這些類相互之間進行協做來完成特定的業務邏輯。按照傳統作法,每一個對象負責管理與本身互相協做的對象的引用,這將會致使高度耦合和難以測試的代碼。安全

    耦合具備兩面性。一方面,緊密耦合的代碼難以測試、難以複用、難以理解,而且典型地出現打地鼠式的bug特性。另外一方面,必定程度的耦合又是必須的,徹底沒有耦合的代碼什麼也作不了。總而言之,耦合是必須的,但應當被當心謹慎的管理。框架

    經過依賴倒置,對象的依賴關係將由系統中負責協調各對象的第三方組件在建立對象的時候進行設定。對象無需自行建立或管理它們的依賴關係,依賴系統將被自動侏儒到須要他們的對象中去。post

1.1.3 應用切面(AOP)

    依賴倒置可以讓互相協做的軟件組件保持鬆散耦合,而面向切面編程(aspect-oriented-programming),容許你把遍及應用各處的功能分離出來造成可重用的組件。測試

    AOP每每被定義爲促使軟件系統實現關注點的分離技術。例如日誌、事務管理和安全這樣的系統服務常常融入到自身具備核心業務邏輯的組件中去,這些系統服務一般被稱爲橫切關注點,由於它們會跨越系統的多個組件。spa

1.1.4 消除樣板式代碼

    最經常使用的是JDBC代碼,好比查詢,只有少許查詢代碼淹沒在一堆JDBC的樣板式代碼中。並且JDBC不是產生樣板式代碼的惟一場景。日誌

    JDBC不是生產樣板式代碼的覺得場景。在許多編程場景中每每會致使相似的樣板式代碼,JMS、JNDI和使用REST服務一般也涉及大量的重複代碼。對象

1.2 容納Bean

1.2.1 使用應用上下文

    Spring自帶了多種類型的應用上下文:繼承

  • AnnotationConfigApplicationContext:從一個或多個基於Java的配置類中加載Spring應用上下文;
  • AnnotationConfigWebApplicationContext:從一個或多個基於Java的配置類中加載Spring Web應用上下文;
  • ClassPathXmlApplicationContext:從類路徑下的一個或多個XML配置文件中加載上下文定義,把應用上下文的定義文件做爲類資源;
  • FileSystemXmlApplicationContext:從文件系統下的一個或多個XML配置文件中加載上下文定義;
  • XmlWebApplicationContext:從Web應用下的一個或多個XML配置文件中加載上下文定義;

1.2.2 Bean的生命週期

  1. Spring對Bean進行實例化;
  2. Spring將值和Bean的引用注入到Bean對應的屬性中;
  3. 若是Bean實現了BeanNameAware接口,Spring將Bean的ID傳遞給setBeanName()方法;
  4. 若是Bean實現了BeanFactoryAware接口,Spring將調用setBeanFactory()方法,將BeanFactory容器傳入實例;
  5. 若是Bean實現了ApplicationContextAware接口,Spring將調用setApplicationContext()方法,將Bean所在的應用上下文的引用傳入進來;
  6. 若是Bean實現了BeanPostProcessor接口,Spring將調用它們的postProcessBeforeInitialization()方法;
  7. 若是Bean實現了InitializingBean接口,Spring將調用它們的afterPropertiesSet()方法。相似的,若是Bean使用initMethod聲明瞭初始化方法,該方法也會被調用;
  8. 若是Bean實現了BeanPostPrecessor接口,Spring將調用他們的postProcessAfterInitialization()方法;
  9. 此時,Bean已經準備就緒,能夠被應用程序使用了,他們將一直駐留在應用上下文中,直到該應用上下文被銷燬;
  10. 若是Bean實現了DisposableBean接口,Spring將調用它的destroy()接口方法。一樣,若是Bean使用destoryMethod聲明瞭銷燬方法,該方法也會被調用;

1.3 Spring風景線

1.3.1 Spring模塊

    當咱們下載Spring發佈版本並查看其lib目錄時,會發現裏面有多個JAR文件,在Spring4.0中包括了20個不一樣的模塊,每一個模塊會有3個JAR文件(二進制類庫、源碼的JAR以及JavaDoc的JAR)。

    這些模塊分爲6類不一樣的功能:

  • 數據庫訪問與集成:JDBC、Transaction、ORM、OXM、Messaging、JMS;
  • Web與遠程調用:Web、WebServlet、WebPortlet、WebSocket;
  • 面相切面編程:AOP、Aspects;
  • Instrumentation:Instrument、InstrumentTomcat;
  • Spring核心容器:Beans、Core、Context、Expression、ContextSupport;
  • 測試:Test;

1.3.2 Spring Portfolio

    事實上,Spring遠不是Spring框架鎖下載的那些。歸納的講,整個Spring Portfolio幾乎爲每個領域的Java開發都提供了Spring編程模型。

  • SpringWebFlow:基於流程的會話式Web應用;
  • SpringWebService:提供了契約優先的WebService模型;
  • SpringSecurity:提供了聲明式的安全機制;
  • SpringIntegration:提供了多種通用應用集成模型的Spring聲明式風格實現;
  • SpringBatch:提供對數據進行大量操做;
  • SpringData:爲持久化提供了一種簡單的編程模型;
  • SpringSocial:它可以幫助你經過REST API鏈接Spring應用;
  • SpringMobile:支持移動Web應用開發;
  • SpringforAndroid:基於Android設備的本地應用提供某些簡單的支持;
  • SpringBoot:大量依賴於自動配置技術,消除大部分Spring配置。
相關文章
相關標籤/搜索