天天看點

Spring3學習筆記 一1. Spring概述

1. Spring概述

  • 原文位址: 跟我學spring3

1.0. 如何學好Spring

  1. 明确Spring是什麼
  2. 知道Spring能幫我們做什麼事
  3. 了解Spring核心: IOC容器
  4. 如何配置和使用容器, 其餘技術都是基于容器實作的
  5. 了解面向切面程式設計, 如何配置, 實作原理
  6. 了解資料庫事務管理, Spring管理事務都是通過面向切面程式設計實作的
  7. 重點是IOC 和 AOP

1.1. Spring是什麼

  • 一個開源的輕量級開發應用架構, 目的是簡化企業級應用程式開發
  • 通過配置方式來建立對象,管理對象之間依賴關系,我們不需要通過工廠和生成器來建立及管理對象之間的依賴關系
  • 總的來說: Spring是一個超級粘合平台, 自己供給功能, 還提供與别的技術粘合的能力

1.2. Spring能幫我們做什麼

  1. 通過配置檔案建立群組裝對象之間的依賴關系
  2. 面向切面程式設計能無耦合的實作日志記錄, 性能統計, 安全控制
  3. 非常簡單的管理資料庫事務: 擷取連接配接, 執行SQL, 送出/復原事務, 關閉連接配接
  4. 提供很多與第三方架構和技術的整合

1.3. 為什麼需要Spring

  • 幾個概念:
    1. 應用程式:是能完成我們所需要功能的成品,比如購物網站、OA 系統。
    2. 架構:是能完成一定功能的半成品,比如我們可以使用架構進行購物網站開發;架構做一部分功能,我們自己做一部分功能,這樣應用程式就建立出來了。而且架構規定了你在開發應用程式時的整體架構,提供了一些基礎功能,還規定了類和對象的如何建立、如何協作等,進而簡化我們開發,讓我們專注于業務邏輯開發。
    3. 非侵入式設計:從架構角度可以這樣了解,無需繼承架構提供的類,這種設計就可以看作是非侵入式設計,如果繼承了這些架構類,就是侵入設計,如果以後想更換架構之前寫過的代碼幾乎無法重用,如果非侵入式設計則之前寫過的代碼仍然可以繼續使用。
    4. 輕量級及重量級:輕量級是相對于重量級而言的,輕量級一般就是非入侵性的、所依賴的東西非常少、資源占用非常少、部署簡單等等,其實就是比較容易使用,而重量級正好相反。
    5. POJO:POJO(Plain Old Java Objects)簡單的 Java 對象,它可以包含業務邏輯或持久化邏輯,但不擔當任何特殊角色且不繼承或不實作任何其它 Java 架構的類或接口。
    6. 容器:在日常生活中容器就是一種盛放東西的器具,從程式設計角度看就是裝對象的的對象,因為存在放入、拿出等操作,是以容器還要管理對象的生命周期。
    7. 控制反轉:即 Inversion of Control,縮寫為 IoC,控制反轉還有一個名字叫做依賴注入(Dependency Injection),就是由容器控制程式之間的關系,而非傳統實作中,由程式代碼直接操控。
    8. Bean:一般指容器管理對象,在 Spring 中指 Spring IoC 容器管理對象。
  • 選擇Spring的理由和優點
    • 非常輕量級的容器, 核心JAR包小, 完全采用POJO進行開發, 不依賴任何伺服器
    • AOP: 面向切面程式設計, 把可重用的功能提取出來,然後将這些通用功能在合适的時候織入到應用程式中;比如 安全, 日志記錄等
    • 簡單的資料庫管理和靈活的Web層支援
    • 簡化了各種技術支援

1.4. Spring架構

  • Spring3學習筆記 一1. Spring概述
  • 核心容器: Core、Beans、Context、EL
    • Core: 封裝了架構依賴的最底層部分,包括資源通路、類型轉換及一些常用工具類
    • Beans 子產品:提供了架構的基礎部分,包括反轉控制和依賴注入。其中 Bean Factory 是容器核心,本質是 “工廠設計模式” 的實作,而且無需程式設計實作“單例設計模式”,單例完全由容器控制,而且提倡面向接口程式設計,而非面向實作程式設計;所有應用程式對象及對象間關系由架構管理,進而真正把你從程式邏輯中把維護對象之間的依賴關系提取出來,所有這些依賴關系都由 BeanFactory 來維護。
    • Context 子產品:以 Core 和 Beans 為基礎,內建 Beans 子產品功能并添加資源綁定、資料驗證、國際化、Java EE 支援、容器生命周期、事件傳播等;核心接口是 ApplicationContext。
    • EL 子產品:提供強大的表達式語言支援,支援通路和修改屬性值,方法調用,支援通路及修改數組、容器和索引器,命名變量,支援算數和邏輯運算,支援從 Spring 容器擷取 Bean,它也支援清單投影、選擇和一般的清單聚合等。
  • AOP、Aspects 子產品:
    • AOP 子產品:Spring AOP 子產品提供了符合 AOP Alliance 規範的面向方面的程式設計(aspect-oriented programming)實作,提供比如日志記錄、權限控制、性能統計等通用功能和業務邏輯分離的技術,并且能動态的把這些功能添加到需要的代碼中;這樣各專其職,降低業務邏輯和通用功能的耦合。
    • Aspects 子產品:提供了對 AspectJ 的內建,AspectJ 提供了比 Spring ASP 更強大的功能。
  • 資料通路 / 內建子產品:該子產品包括了 JDBC、ORM、OXM、JMS 和事務管理。
    • 事務子產品:該子產品用于 Spring 管理事務,隻要是 Spring 管理對象都能得到 Spring 管理事務的好處,無需在代碼中進行事務控制了,而且支援程式設計和聲明性的事物管理。
    • JDBC 子產品:提供了一個 JBDC 的樣例模闆,使用這些模闆能消除傳統冗長的 JDBC 編碼還有必須的事務控制,而且能享受到 Spring 管理事務的好處。
    • ORM 子產品:提供與流行的 “對象 - 關系” 映射架構的無縫內建,包括 Hibernate、JPA、Ibatiss 等。而且可以使用 Spring 事務管理,無需額外控制事務。
    • OXM 子產品:提供了一個對 Object/XML 映射實作,将 java 對象映射成 XML 資料,或者将 XML 資料映射成 java 對象,Object/XML 映射實作包括 JAXB、Castor、XMLBeans 和 XStream。
    • JMS 子產品:用于 JMS(Java Messaging Service),提供一套 “消息生産者、消息消費者” 模闆用于更加簡單的使用 JMS,JMS 用于用于在兩個應用程式之間,或分布式系統中發送消息,進行異步通信。
    • Web/Remoting 子產品:Web/Remoting 子產品包含了 Web、Web-Servlet、Web-Struts、Web-Porlet 子產品。
  • Web 子產品:提供了基礎的 web 功能。例如多檔案上傳、內建 IoC 容器、遠端過程通路(RMI、Hessian、Burlap)以及 Web Service 支援,并提供一個 RestTemplate 類來提供友善的 Restful services 通路。
  • Web-Servlet 子產品:提供了一個 Spring MVC Web 架構實作。Spring MVC 架構提供了基于注解的請求資源注入、更簡單的資料綁定、資料驗證等及一套非常易用的 JSP 标簽,完全無縫與 Spring 其他技術協作。
  • Web-Struts 子產品:提供了與 Struts 無縫內建,Struts1.x 和 Struts2.x 都支援
  • Test 子產品: Spring 支援 Junit 和 TestNG 測試架構,而且還額外提供了一些基于 Spring 的測試功能,比如在測試 Web 架構時,模拟 Http 請求的功能。