Spring框架基本概念,Spring框架模塊詳解

        簡單來說的話,Spring就是一個輕量級的控制反轉(IOC)和麪向切面(AOP)的容器框架。

        Spring是基於Java平臺的,它爲應用程序的開發提供了全面的基礎設施支持。正是因爲Spring專注於基礎設施,這才使得開發者們能夠更好的致力於應用開發而不用去關心底層的框架。Spring框架的核心功能適用於任何Java應用。在基於Java企業平臺的上的大量Web應用中,積極的擴展和改進已經形成。而Spring的用途也不僅限於服務器端的開發,從簡單性、可測試性和鬆耦合性的角度來說,任何Java應用都可以從Spring中獲得好處。


        1、Spring框架的優勢

        Spring框架的優勢可以總結爲以下幾點:

  • Spring框架能有效的組織中間層對象。Spring框架能夠有效地將現有的框架例如Struts2和Hibernate框架組織起來。
  • Spring框架實現了真正意義上的面向接口編程,可實現組件之間的高度解耦,而面向接口編程是一種良好的編程習慣。
  • Spring所秉承的設計思想就是讓使用Spring創建的那些應用都儘可能少的依賴於它的APIs。在Spring應用中大多數業務對象都不依賴於Spring。
  • 使用Spring構建的應用程序易於進行單元測試。
  • Spring提高了代碼的可重用性,它儘可能避免在程序中使用硬編碼。Spring可以將應用程序中的某些代碼抽象出來,然後在其他應用程序中使用這些代碼。
  • Spring爲數據存取提供了一個一致的框架,簡化了底層數據庫的訪問方式。      

        2、依賴注入(DI)和控制反轉(IOC)

        依賴注入(Dependency Injection)和控制反轉(Inversion Of Control)實際上是一個概念。在傳統的程序設計中,通常由調用者來創建被調用者的實例,而在依賴注入或控制反轉的定義中,調用者不負責被調用者的實例創建工作,該工作由Spring框架中的容器來負責,它通過開發者的配置來判斷實例的類型,創建後再注入調用者。由於Spring容器負責創建被調用者的實例,實例創建後又負責將該實例注入調用者,因此稱作依賴注入(Dependency Injection),而被調用者的實例創建工作不再由調用者來創建而是由Spring來創建,因此也被稱作控制反轉(IOC)。

        3、面向切面編程(AOP)

        AOP(Aspect-Oriented Programming),也就是面向切面編程,它是面向對象編程(OOP)的補充和完善。

        在OOP中通過繼承、封裝和多態性等概念建立起了多個對象之間的層次結構關係,但當需要爲這些分分散的對象加入一些公共的行爲時,OOP就顯得力不從心了。換句話說就是,OOP擅長的是定義從上到下的關係,但是並不適用定義從左到右的關係。以日誌功能爲例,日誌代碼往往或分散中的存在於所有的對象層次中,而這些代碼又與其所屬對象的核心更能沒有任何關係。像日誌代碼這種分散在各處且與對象核心功能無關的代碼就被成爲橫切(cross-cuting)代碼。在OOP中,正是橫切代碼的存在導致了大量的代碼重複,而且增加了模塊複用的難度。

        AOP的出現恰好解決了OOP技術的這種侷限性。AOP利用了一種稱爲''橫切''的技術,將封裝好的對象剖開,找出其中對多個對象產生影響的公共行爲,並將其封裝爲一個可重用的模塊,這個模塊被命名爲''切面''(Aspect)。切面將那些與業務無關,卻被業務模塊共同調用的邏輯提取並封裝起來,減少了系統中的重複代碼,降低了模塊間的耦合度,同時提高了系統的可維護性。

        4、Spring框架模塊        先來看一張官網上提供的框架模塊圖

       

        Spring框架遵循模塊的架構模式,總共有20多個模塊組成,包括核心容器、數據訪問/集成、Web、AOP等等。這些模塊爲我們提供了開發企業級應用所需要的一切東西。在開發過程中,這些模塊並不都是必須的,可以針對具體的應用自由的選擇所需要的模塊。還可以將Spring與其他框架進行集成,使得開發過程更有針對性、更有效率。

        下面依次介紹這些模塊。

        (1)核心容器(Core Container)

        可以看到,位於Spring結構圖最底層的是其核心容器Core Container。Spring的核心容器由Beans、Core、Context和Expression Language模塊組成,Spring的其他模塊都是建立在覈心容器之上的。

        Beans和Core模塊實現了Spring框架的最基本功能,規定了創建、配置和管理Bean的方式,提供了控制反轉(IOC)和依賴注入(DI)的特性。

        核心容器中的主要組件是BeanFactory類,它是工廠模式的實現,JavaBean的管理就由它來負責。BeanFactory類通過IOC將應用程序的配置以及依賴性規範與實際的應用程序代碼相分離。

        Context模塊建立在Bean和Core模塊之上,該模塊像Spring框架提供了上下文信息。它擴展了BeanFactory,添加了國際化(I18N)的支持,提供了國際化、資源加載和校驗等功能,並支持與模塊框架如Velocity、Freemarker的集成。

        Expression Language模塊提供了一種強大的表達式語言來訪問和操縱運行時對象。該表達式該表達式語言是在JSP2.1中規定的統一表達式語言的延伸,支持設置和獲取屬性值、方法調用、訪問數組、集合和索引、邏輯和算數運算、明明變量、根據名稱從IOC容器中獲取對象等功能,也支持list投影、選擇和list聚合功能。

        (2)數據訪問/集成模塊

        數據訪問/集成模塊由JDBC、ORM、OXM、JMS和Transaction這幾個模塊組成。在編寫JDBC代碼時常常需要一套程序化的代碼,Spring的JDBC模塊將這些程序化的代碼進行抽象,提供了一個JDBC的抽象層,這樣就大幅減少了開發過程中對數據庫操作代碼的編寫,同事,也避免了開發者去面對複雜的JDBC API以及因爲釋放數據庫資源失敗而引起的一系列問題。

        ORM模塊爲主流的對象關係映射(object-relation mapping)API提供了集成層,這些主流的對象關係映射API包括了JPA、JDO、Hibernate和IBatis。該模塊可以將O/R映射框架與Spring提供的特性進行組合來使用。。

        OXM模塊爲支持Object/XML映射的實現提供了一個抽象層,這些支持Object/XML映射的實現包括JAXB、Castor、XMLLBeans、JiBX和XStream。

        JMS(Java Messaging Service)模塊包含發佈和訂閱消息的特性。

        Transaction模塊體用了對聲明式事務和編程事務的支持,這些事務類必須實現特定的接口,並且對所有的POJO都適用。

        (3)Web模塊

        Web模塊包括Web、Servlet、Struts和Protlet這幾個模塊。

        Web模塊提供了基本的面向Web的集成功能,如多文件上傳、使用servlet監聽器初始化IOC容器和麪向Web的應用上下文,還包含Spring的遠程支持中與Web相關的部分。

        Servlet模塊提供了Spring的Web應用的模型-視圖-控制器(MVC)實現。

        Struts模塊提供了對Struts的支持,提供了將一個典型的Struts Web層集成在一個Spring應用程序中的支持類。

        Protlet模塊提供了一個在protlet環境中使用的MVC實現。

        (4)AOP和Instrumentation模塊

        AOP模塊提供了一個在AOP聯盟標準的面向切面編程的實現,使用該模塊可以定義方法攔截器和切點,將代碼按功能進行分離,降低了它們之間的耦合性。利用source-levelde的元數據功能,還可以將各種行爲信息合併到開發者的代碼中。

        Aspects模塊提供了對AspectJ的集成支持。

        Instrumentation模塊提供了class  istrumentation的支持和classloader實現,可以在特定的應用服務器上使用。

        (5)Test模塊

        Test模塊支持使用JUnit和TestNG對Spring組件進行測試,它提供一致的ApplicationContexts並緩存這下上下文,他還提供了一些mock對象,使得開發者可以獨立的測試代碼。

        有關Spring的基本概念還有Spring框架模塊的介紹到此爲止,下一篇博文將展示一個基於Spring的HelloWorld程序。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章