1.Spring體系結構?
主要分為5大模塊:
(1)數據訪問和集成:JDBC、ORM、OXM、JMS、事務管理。
Spring站在DAO的抽象層面,建立了一套面向DAO層統一的異常體系,同時將各種訪問數據的檢查異常型異常轉換為非檢查異常,為整合各種之久層框架提供給了基礎。
其次,Spring通過模板化技術對各種數據庫訪問技術進行了薄層的封裝,將模式化的代碼隱藏起來,簡化了數據庫訪問的代碼。
這樣,Spring就建立了和數據形式訪問技術無關的統一的DAO層,借助AOP技術,Spring提供了聲明式事務的功能。
(2)Web及遠程操作:MVC、Web Service、Portlet
該模塊建立在Application Context 模塊之上,提供了Web應用的各種工具類。如通過Listener或Servlet初始化Spring容器,將Spring容器注冊到Web容器中。
其次,該模塊還提供了多種面向Web的功能,例如透明化文件上傳、Velocity、FreeMarker、XSLT的支持。
此外,SPring還可以整合Struts2、WebWork等MVC框架。
(3)測試框架
(4)AOP:Spring AOP、Aspects
Aop是進行橫切邏輯編程的思想,它開拓了思考問題的思路。
(5)IoC:Bean、Context、表達式語句
Spring核心模塊實現了IoC的功能,它將類和類之間的依賴從代碼中脫離出來,用配置的方法進行依賴關系的描述,由IoC容器負責依賴之間的創建、拼接、管理、獲取等工作。
BeanFactory接口是Spring框架的核心接口,它實現了容器許多核心的功能。
Context模塊構建與核心模塊之上,擴展了BeanFactory的功能,添加了il8n國際化、Bean生命周期的控制、框架事件體系、資源加載透明化等多項功能。該模塊還提供了許多企業級服務的支持,例如郵件服務、任務調度、JNDI定位、EJB集成、遠程訪問等。ApplicationContext是Context的核心接口。
表達式語言是統一表達式語言(unified EL)的一個擴展,該表達式語言用於查詢和管理運行期的對象,支持設置和獲取對象屬性,調用對象方法、操作數組、集合等。還提供了邏輯表達式運算、變量定義等功能,使用它可以方便的通過表達式串和SpringIoC容器的交互。
2.理解IoC(Inversion of Control,控制反轉)
了解DI(Dependency Injection) :依賴注入,不管是控制層的Action對象,業務層的Service對象,還是持久層的DAO對象,都可以在Spring的管理下有機地協調、運行。Spring將各層的對象以松耦合的方式組織在一起,Action對象無需關心Service對象的具體實現,各層對象的調用完全面向接口。當系統需要重構時,代碼的改寫量將大大減少。
之所以被稱為依賴注入,因為被調用者實例的工作通常由Spring容器完成,然後注入調用者。程序運行過程中,如果需要弟阿勇一個對象協助時,無需在代碼中創建被調用者,而是依賴外部的注入。Spring的依賴注入對調用者和被調用者幾乎沒有任何要求,完全支持POJO之間依賴關系的管理。
DI(依賴注入)和Ioc(控制反轉)是同一個概念。
IoC:當某個角色(一個java實例,調用者)需要另一個角色(另一個java實例,被調用者)的協助時,在傳統的程序設計過程中,一般由調用者來創建被調用者的實例。在Spring中,創建被調用者的工作不再是由使用者完成,因此成為控制反轉。也就是說,所有的組件都是被動的,所有的組件和調用都是有容器負責,並由容器負責管理。
3.Spring注入
Spring注入是在啟動Spring容器加載Bean的時候,完成對變量的賦值行為。
常用的兩種注入方式:設置注入 和 構造注入。
4.Bean的作用域
singleton:單例,指一個Bean容器中值存在一份。
prototype:每次請求(每次使用)都會創建新的實例,destroy方式不生效。
request:每次http請求創建一個實例且僅在當前request內有效
session:同上,每次http請求的創建,當前session內有效
global session:基於portlet的文本中有效(portlet定義了global session),如果是在web中,同session。
5.Bean的生命周期
(1).定義
(2).初始化
實現org-springframework.beans.factory.InitializingBean接口,覆蓋afterPropertySet方法
配置init-method
(3).使用
(4).銷毀
實現org-springframework.beans.factory.DisableBean接口,覆蓋destroy方法。
配置destory-method
6.Spring中Bean的生命周期
(1)Singleton作用域
當一個Bean的作用域設置為singleton,那麼Spring IoC容器中只會存在一個共享的Bean實例,並且所有對Bean的請求,只要id與該Bean定義相匹配,則會返回Bean的同一實例。當把一個Bean定義設置為singleton作用域時,Spring IoC容器只會創建該Bean的唯一實例。這個單例會被存儲到單例緩存中,並且所有針對該Bean的後續請求和引用都將返回被花村的對象實例。
(2).prototype作用域
prototype作用域部署的Bean,每一次請求(將注入到另一個Bean中,或者以程序的方式調用容器的getBean()方法)都會產生一個新的Bean實例。相當於一個new操作。對於prototype作用域的Bean,有一點非常重要,那就是Spring不能對一個prototype Bean的整個生命周期負責,容器在初始化、配置或者是裝配完一個prototype實例後,將它嫁給客戶,隨後就不管了。