Spring是一個開源的輕量級的Java企業應用開發框架,其初衷是爲了替代當時很是笨重的Java EE(當時還稱爲J2EE)組件技術EJB(Enterprice Java Beans),讓Java EE開發更加簡單靈活。前端
Spring最重要的兩個核心功能是依賴注入(DI,Dependency Injection)和麪向切面編程(AOP,Aspect Oriented Programming)。其中DI用於管理Java對象之間的依賴關係,AOP用於解耦業務代碼和公共服務代碼(如日誌,安全,事務等)。DI和AOP可以讓代碼更加簡單,具備良好的鬆耦合特性和可測試性,極大地簡化開發。理解這二者是使用Spring框架的基礎。數據庫
Spring框架自己具備模塊化的分層架構,開發者能夠根據須要使用其中的各個模塊。Spring框架對Java企業應用開發中的各種通用問題都進行了良好的抽象,所以也可以把應用各個層次所涉及的特定開發框架(如MVC框架、ORM框架)方便得組合到一塊兒。Spring是一個極其優秀的一站式的Full-Stack集成框架。編程
DI(Dependency injection依賴注入)緩存
面向對象的程序經過一組對象之間相互通訊來實現特定功能,這裏的通訊具體來講就是一個對象對另外一個對象的方法調用或者屬性訪問。好比有一個BlogRespositry
類負責將博客內容存儲到數據庫,一個BlogServlet
負責解析前端的Web請求。BlogServlet
接受到新建博客的請求以後,須要調用BlogRespositry
的方法來保存博客內容。這裏BlogRespositry
就是BlogServlet
的一個依賴,具體體如今BlogServlet
會包含一個BlogRespositry
類型的成員變量。安全
而使用依賴注入技術,則BlogRespositry
的依賴(即BlogService
類)是由外部實例化以後注入給它的。依賴注入也稱爲控制反轉(IoC,Inversion of Controll)。當建立一個對象時,它所依賴的對象由外部傳遞給它,而非本身去建立所依賴的對象(向例子中這樣經過new
操做)。所以,也能夠說在對象如何獲取它的依賴對象這件事情上,控制權反轉了。這即是控制反轉和依賴注入這兩個名字的由來了。架構
DI可讓對象之間的關係更加鬆耦合,並且會促使你使用面向接口編程,同時也讓測試更加方便。app
AOP框架
面向切面編程(Aspect Oriented Programming,AOP)是一種關注點分離的技術,通俗的說就是有機地將各部分代碼進行分離,各司其職,互不干擾。軟件開發中常常提一個詞,叫作「業務邏輯」或者「業務功能」,咱們的代碼主要就是實現某種特定的業務邏輯。可是咱們每每不能專一於業務邏輯,好比咱們寫業務邏輯代碼的同時,還要關注事務管理、緩存、日誌等一系列通用功能,若是每一個業務功能都要和這些通用功能混在一塊兒,是一件很是低效和痛苦的事情。因此,爲了將業務功能的關注點和通用化功能的關注點分離開來,就須要AOP技術了。通用功能的代碼實現,對應的就是咱們說的切面(Aspect)。模塊化
簡而言之,AOP就是一種在開發時將業務相關代碼和業務無關的通用功能代碼有機分離,而運行時又可以整合到一塊兒造成完整功能的一整套技術。Spring框架中一些模塊自己就是基於AOP技術來實現的,例如事務處理和安全相關的模塊。單元測試
Spring包含六個部分功能,這六部份實現的功能功能分別爲: