1.什么是Spring Framework?
Spring Framework(簡稱Spring)是根據(jù)Rod Johnson著名的《Expert One-on-One J2EE Design and Development》而開發(fā)的J2EE應用程序框架。目前主要根據(jù)Rod Johnson和Juergen Hoeller而進行開發(fā)的,目前發(fā)布的最新版為1.1.4。 Spring是J2EE應用程序框架,不過,更嚴格地講它是針對Bean的生命周期進行管理的輕量級容器(Lightweight container),可以單獨利用Spring構筑應用程序,也可以和Struts,Webwork,Tapestry等眾多Web應用程序框架組合使用,并且可以與Swing等桌面應用程序API組合。所以Spring并不僅僅只能應用在J2EE中,也可以應用在桌面應用及小應用程序中。針對Spring開發(fā)的組件不需要任何外部庫。
2.使用Spring有什么好處?
(1)Spring能有效地組織你的中間層對象。
(2)Spring能消除在許多工程中常見的對Singleton的過多使用。
(3)Spring能消除各種各樣自定義格式的屬性文件的需要,使配置信息一元化。
(4)Spring能夠幫助我們真正意義上實現(xiàn)針對接口編程。
(5)在Spring應用中的大多數(shù)業(yè)務對象沒有依賴于Spring。
(6)使用Spring構建的應用程序易于單元測試。
(7)Spring支持JDBC和O/R Mapping產(chǎn)品(Hibernate)
(8)MVC Web框架,提供一種清晰,無侵略性的MVC實現(xiàn)方式。
(9)JNDI抽象層,便于改變實現(xiàn)細節(jié),可以方便地在遠程服務和本地服務間切換。
(10)簡化訪問數(shù)據(jù)庫時的例外處理。
(11)Spring能使用AOP提供聲明性事務管理,可以不直接操作JTA也能夠對事務進行管理。
(12)提供了JavaMail或其他郵件系統(tǒng)的支持。
3.什么是輕量(Lightweight)級容器?
Spring的開發(fā)者可以避免使用重量級容器開發(fā)EJB時的缺點:
(1)帶有侵略性的API。(代碼依賴于EJB)
(2)對容器的依賴。(代碼不能在EJB容器之外工作)
(3)提供固定的一組機能,不具有配置能力。
(4)不同的產(chǎn)品,部署過程不同,不易通用。
(5)啟動時間長。
針對以上問題,Spring采用了IoC使代碼對Spring的依賴減少,根據(jù)Web應用,小應用程序,桌面應用程的不同,對容器的依賴程度也不同。Spring將管理的Bean作為POJO(Plain Old Java Object)進行控制,通過AOP Interceptor能夠增加其它的功能。
除了Spring以外的輕量級容器還有PicoContainer,(不是輕量級容器)對Bean的生命周期進行管理的還有Apache Avalon Project的Avalon等。
總結:Spring的核心思想便是IoC和AOP,Spring本身是一個輕量級容器,和EJB容器不同,Spring的組件就是普通的Java Bean,這使得單元測試可以不再依賴容器,編寫更加容易。Spring負責管理所有的Java Bean組件,同樣支持聲明式的事務管理。我們只需要編寫好Java Bean組件,然后將它們“裝配”起來就可以了,組件的初始化和管理均由Spring完成,只需在配置文件中聲明即可。這種方式最大的優(yōu)點是各組件的耦合極為松散,并且無需我們自己實現(xiàn)Singleton模式。