1 輕量web
從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架能夠在一個大小隻有1MB多的JAR文件裏發佈。而且Spring所需的處理開銷也是微不足道的。數據庫
2 控制反轉(Ioc)或依賴注入(DI)編程
控制反轉促進了應用程序的低耦合,Ioc是指一個對象的依賴對象的獲取,是經過被動的方式傳遞進來,而不是這個對象本身建立依賴對象。而DI只是和Ioc概念上不一樣,其原理都是同樣的;DI是指一個對象的依賴對象的獲取,是由Spring容器主動注入的。設計模式
3 面向切面安全
Spring提供了面向切面編程的豐富支持,容許系統共性的功能和實際業務功能分離開發,實際運行時,經過動態代理的原理,再將共性的功能和業務功能整合,從而實現具體的業務。例如事務管理、日誌記錄、權限控制和異常處理等應用。服務器
4 做爲容器架構
Spring做爲容器,能夠用來管理應用對象的配置和生命週期。能夠配置每一個bean如何建立,單例(scope=「singleton」,默認)或多例(scope=「prototype」),bean之間如何關聯即對象之間的依賴。mvc
5 做爲框架框架
Spring能夠將簡單的組件配置,組合成複雜的應用。在Spring中應用對象被聲明式地組合在xml文件裏。Spring也提供了很對基礎功能(例如事務管理和持久化框架集成等等),將應用邏輯的開發留給開發人員。學習
6 mvc
咱們所接觸的SpringMVC。客戶端發送請求,核心控制器(DispatcherServlet)完成請求的轉發,核心控制器調用一個映射器,映射器經過url找到該url對應的處理器,而後經過一個適配器來執行處理器的方法進行請求處理,最後經過視圖解析器來解析ModelAndView對象,解析出響應地址和響應數據,而後響應給客戶端。
1 方便耦合,簡化開發
Spring的控制反轉(Ioc)特徵,能夠將對象之間的依賴關係交由Spring控制,避免硬編碼所形成的過分程序耦合。有了Spring容器,再也不爲單例模式類、屬性文件解析等這些底層的需求進行編碼,能夠更專一於上層的應用。
2 AOP編程的支持
許多不方面使用面向對象編程實現的功能,能夠經過Spring提供的面向切面編程來實現。
3 聲明式事務的支持
在Spring中,咱們能夠從單調煩悶的事務管理代碼中解脫出來,經過聲明式方式靈活地進行事務的管理,提升開發效率和質量。
4 方便集成各類優秀框架
Spring不排斥各類優秀的開源框架,相反,Spring能夠下降各類框架的使用難度,Spring提供了對各類優秀框架(如Struts,Hibernate、Hessian、Quartz)等的直接支持。
5 下降JavaEE API的使用難度
Spring對不少難用的Java EE API(如JDBC,JavaMail,遠程調用等)提供了一個薄薄的封裝層,經過Spring的簡易封裝,這些Java EE API的使用難度大爲下降。
6 Java源碼是經典學習範例
Spring的源碼設計精妙、結構清晰、匠心獨運,到處體現着大師對Java設計模式的靈活運用以及對Java技術的高深造詣。Spring框架源碼無疑是Java技術的最佳實踐範例。若是想在短期內迅速提升本身的Java技術水平和應用開發水平,學習和研究Spring源碼將會使你收到意想不到的效果。
1 低侵入式設計,代碼污染極低;2 獨立於各類應用服務器,基於Spring框架的應用,能夠真正實現Write Once,Run Anywhere的承諾;3 Spring的DI機制下降了業務對象替換的複雜性,提升了組件之間的解耦;4 Spring的AOP支持容許將一些通用任務如安全、事務、日誌等進行集中式管理,從而提供了更好的複用;5 Spring的ORM和DAO提供了與第三方持久層框架的良好整合,並簡化了底層的數據庫訪問;6 Spring並不強制應用徹底依賴於Spring,開發者可自由選用Spring框架的部分或所有。
Spring 框架是一個分層架構,由 7 個定義良好的模塊組成。Spring模塊構建在覈心容器之上,核心容器定義了建立、配置和管理 bean 的方式,如圖所示。組成Spring框架的每一個模塊(或組件)均可以單獨存在,或者與其餘一個或多個模塊聯合實現。
參考:http://baike.baidu.com/link?url=hBPdHrBL8UtX29FCo5Px5fidRRCtwE87lXCN3iq_FhVej6nK2cBilA0t6plVN9t7TUJGoDF5Dbs4mMZjEfJMmq
1 Set注入
類中須要提供setXxx方法,最長使用。下面例子是給UserService對象的屬性userDao賦值,那麼UserviceImpl類只需提供setDao(UserDao userDao)便可。
2 構造注入
須要提供特定參數的構造方法。
3 接口注入
1 String類型或基本類型對應的包裝類型
2 List屬性
3 Map屬性
4 Set屬性
5 Properties
1 單例模式不存在懶加載(屬性scope="singleton",默認),Spring容器加載完成,立馬建立對象。
2 多例模式存在懶加載,Spring容器加載完成後,不會立馬建立bean的對象,只有getBean的時候,纔會建立對象。
考慮到某些業務的須要,啓動web容器的時候,爲解決內存使用問題和速度問題,使用多例。
經過bean標籤的autowire屬性完成自動裝配的規則設定。目的是減小配置文件的內容。