Spring提供了IOC技術,容器會幫你管理依賴的對象,從而不須要本身建立和管理依賴對象,更輕鬆的實現程序的解耦。mysql
Spring提供了事務支持,使得事務操做變得根據方便。web
Spring提供了AOP(面向切面編程),這樣能夠更方便的處理某一類問題。spring
更方便的框架集成,Spring能夠很方便的集成其餘框架,好比Mybatis、Hibernate等。sql
AOP是面向切面編程,經過預編譯方式和運行期動態代理實現程序功能的統一維護的一種技術。數據庫
IOC就是控制反轉,是Spring的核心,對於Spring框架來講,就是由Spring來負責控制對象的生命週期和對象間的關係。編程
簡單的說,控制指的是當前對象對內部成員的控制權,控制反轉指的是,這種控制權不禁當前對象管理了,由其餘(類,第三方容器)來管理。安全
Spring core:框架的最基礎部分,提供IOC和依賴注入特性。session
Spring context:構建於core封裝包基礎上的context封裝包,提供了一種框架式的對象訪問方法。多線程
Spring dao:Data Access Object提供了JDBC的抽象層。mvc
Spring web:提供了針對web開發的集成特性,例如文件上傳,利用servlet listeners進行IOC容器初始化和針對web的ApplicationContext。
Spring web mvc:Spring中的MVC封裝包提供了web應用的Model-View-Controller的實現。
setter屬性注入。
構造方法注入。
註解方式注入。
Spring中的bean默認是單例模式,spring框架並無對單例bean進行多線程的封裝處理。
實際上大部分時候Spring bean無狀態的(好比dao類),因此某種程度上bean也是安全的,但若是bean有狀態的話(好比view model對象),那就要開發者本身去保證線程安全了,最簡單的就是改變bean的做用域,把singleton變動成prototype,這樣請求bean至關於new bean了,因此就能夠保證線程安全。
有狀態就是有數據存儲功能。
無狀態就是不會保存數據。
Spring支持五種做用域:
no:默認值,表示沒有自動裝配,應使用顯式bean引用進行裝配。
byName:根據bean的名稱注入對象依賴項。
byType:根據類型注入對象依賴項。
構造函數:經過構造函數來注入依賴項,須要設置大量的參數。
autodetect:容器首先經過構造函數使用autowire裝配,若是不能,則經過byType自動裝配。
有兩種實現方式:
髒讀:表示一個事務可以讀取另外一個事務中還未提交的數據。
不可重複讀:表示一個事務內,屢次讀取同一數據。
幻讀:表示同一事務內屢次讀取返回的結果集不同。
Spring有五大事務隔離級別:
前置控制器DispatcherServlet。
映射控制器HandlerMapping。
處理器Controller。
模型和視圖ModelAndView。
視圖解析器ViewResolver。
將http請求映射到相應的類或者方法上。
@Autowired註解它能夠對類成員變量、方法、構造函數進行標註,完成自動裝配的工做,經過@Autowired註解的使用來消除get、set方法。