Spring是一個(gè)開源框架,是為了解決企業(yè)應(yīng)用程序開發(fā)復(fù)雜性而開發(fā)的。從簡單性、可測(cè)試性和松耦合的角度而言,任何Java應(yīng)用都可以從Spring中受益。
簡單來說,Spring就是一個(gè)輕量級(jí)的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架。
下面從整體上認(rèn)識(shí)一下Spring的主要特征:
*輕量:從大小與開銷兩方面而言Spring都是輕量的。此外,Spring是非侵入式的:使用Spring,我們的類還是pojo類,完全不用繼承和實(shí)現(xiàn)Spring的類和接口等。
也就是說,使用Spring的應(yīng)用中的對(duì)象不依賴于Spring的特定類。
*IoC:Spring通過控制反轉(zhuǎn)技術(shù)促進(jìn)了松耦合。當(dāng)應(yīng)用了IoC,一個(gè)對(duì)象依賴的其它對(duì)象會(huì)通過被動(dòng)的方式傳遞進(jìn)來,而不是這個(gè)對(duì)象自己創(chuàng)建或者查找依賴對(duì)象。可以認(rèn)為IoC與JNDI相反--不是我們自己控制對(duì)象從容器中查找依賴,而是容器在對(duì)象初始化時(shí)不等對(duì)象請(qǐng)求就主動(dòng)將依賴傳遞給它,這就是DI--依賴注入。
基本上就是對(duì)象不用自己動(dòng)手管理和創(chuàng)建。完全由容器管理,我們只管用就行。
*AOP:Spring提供了面向切面的編程支持,AOP將與程序業(yè)務(wù)無關(guān)的內(nèi)容分離提取,應(yīng)用對(duì)象只實(shí)現(xiàn)它們應(yīng)該做的--完成業(yè)務(wù)邏輯--僅此而已。它們并不負(fù)責(zé)其它的系統(tǒng)級(jí)關(guān)注點(diǎn),例如日志或事務(wù)支持。
AOP將與業(yè)務(wù)無關(guān)的邏輯橫切進(jìn)真正的邏輯中。
*容器:Spring包含并管理應(yīng)用對(duì)象的配置和生命周期,在這個(gè)意義上它是一種容器,你可以配置你的每個(gè)bean如何被創(chuàng)建--基于一個(gè)可配置原型(prototype),你的bean可以創(chuàng)建一個(gè)單獨(dú)的實(shí)例或者每次需要時(shí)都生成一個(gè)新的實(shí)例--以及它們是如何相互關(guān)聯(lián)的。然而,Spring的容器也是輕量級(jí)的。
*框架:Spring可以將簡單的組件配置、組合成為復(fù)雜的應(yīng)用。在Spring中,應(yīng)用對(duì)象被聲明式地組合,典型地是在一個(gè)XML文件里。Spring也提供了很多基礎(chǔ)功能(事務(wù)管理、持久化框架集成等等),而用戶就有更多的時(shí)間和精力去開發(fā)應(yīng)用邏輯。
所有Spring的這些特征都能幫助我們夠編寫更干凈、更可管理、并且更易于測(cè)試的代碼。它們也為Spring中的各種模塊提供了基礎(chǔ)支持。
下面來具體看看Spring有什么優(yōu)點(diǎn):
*借助Spring,榮國依賴注入,AOP應(yīng)用,面向接口編程,來降低業(yè)務(wù)組件之間的耦合度,增強(qiáng)系統(tǒng)的擴(kuò)展性。
* 讓已有的技術(shù)和框架更加易用。
*利用其對(duì)hibernate的SessionFactory、事務(wù)管理的封裝,更簡潔的應(yīng)用hibernate.
*Spring并不完全依賴于Spring,開發(fā)者可自由選用Spring框架的部分或全部
*利用AOP思想,集中處理業(yè)務(wù)邏輯,減少重復(fù)代碼,構(gòu)建優(yōu)雅的解決方案。
*低侵入式設(shè)計(jì),代碼污染極低。
Spring致力于J2EE應(yīng)用的各層的解決方案,而不是僅僅專注于某一層的方案??梢哉fSpring是企業(yè)應(yīng)用開發(fā)的"一站式"選擇,并貫穿表現(xiàn)層、業(yè)務(wù)層及持久層。
雖然Spring可以一站式解決整個(gè)項(xiàng)目問題,但是Spring并不想取代那些已有的框架,而是與它們無縫地整合。Spring可以降低各種框架的使用難度,他提供了對(duì)各種優(yōu)秀框架(如Struts、Hibernate、Hessian、Quartz等)的直接支持。
使用Spring的主要目的是使J2EE易用和促進(jìn)好的編程習(xí)慣,Spring的目標(biāo)就是讓已有的技術(shù)更加易用。
所以Spring的一個(gè)重要思想就是整合和兼容。因此使用Spring,即使不是最好,也會(huì)更好。