百度百科:Spring是一個開放源代碼的設計層面框架,他解決的是業務邏輯層和其餘各層的鬆耦合問題,所以它將面向接口的編程思想貫穿整個系統應用。Spring是於2003 年興起的一個輕量級的Java 開發框架,由Rod Johnson建立。簡單來講,Spring是一個分層的JavaSE/EEfull-stack(一站式) 輕量級開源框架。前端
二、 Spring優勢: 1.下降組件之間的耦合性 2.專一於本身業務邏輯,統一的行爲(日誌、安全等)抽象出來統一處理 3.易於單元測試 4.方便事物處理 5.Spring並不強制應用徹底依賴於Spring,開發者可自由選用Spring框架的部分或所有 6 . spring對於主流的應用框架提供了集成支持,如hibernate,JPA,Struts等 7 . spring屬於低侵入式設計,代碼的污染極低
8 . 提供了單例模式支持。java
三、 Spring七個模塊 Spring context Spring AOP Spring DAO Spring ORM Spring Web Spring MVC Spring Core程序員
四、 AOP和IOC Aop 容許程序經過分離的應用業務邏輯與系統級別服務。程序員只需專一本身的業務邏輯,而不須要管系統級服務。容器中的對象能享有容器中的公共服務(日誌、安全)。spring
原理 經過動態代理作到這一點。用到了代理模式,代理模式是一種靜態代理,而動態代理就是利用反射和動態編譯將代理模式變成動態的。得知被代理類後經過反射得知他的一切信息,而後動態編譯成代理類的class文件(動態組裝成代理類,生成java文件,再編譯成class文件)。數據庫
優勢 提供另一種編程思路,能夠把相似的行爲抽離出來統一處理。編程
Ioc 依賴注入(DI)和控制反轉(Inversion of Control)是同一個概念。控制權的反轉,在程序中對象的控制權轉到容器而不是程序員本身控制,促進了鬆耦合。依賴注入,將相互依賴的對象分離,在Spring配置文件中,描述他們的依賴關係,用到一個對象時注入,而不須要New一個對象。後端
原理 經過工廠+反射將咱們的bean放到容器中,當咱們想用某個bean的時候,只須要調用getBean("beanID")方法。 優勢 解耦、統一管理bean,缺點佔用內存多、構造對象慢安全
五、 beanFactory與ApplicationContext 兩者是父子關係網絡
Spring的IoC容器就是一個實現了BeanFactory接口的可實例化類,它就是 Spring IoC 容器的真面目。ioc使用 BeanFactory 來實例化、配置和管理 Bean。 若是說BeanFactory是Spring的心臟,那麼ApplicationContext就是完整的軀體了,ApplicationContext由BeanFactory派生而來,提供了更多面向實際應用的功能。 (1)MessageSource, 提供國際化的消息訪問
(2)資源訪問,如URL和文件
(3)事件傳播特性,即支持aop特性session
1.ApplicationContext接口繼承BeanFactory接口,Spring核心工廠是BeanFactory ,BeanFactory採起延遲加載,第一次getBean時纔會初始化Bean, ApplicationContext是會在加載配置文件時初始化Bean。
2.ApplicationContext是對BeanFactory擴展,他能夠國際化處理、資源訪問、事件傳播。
六、 Bean的生命週期 創建 1 . Bean的創建 由BeanFactory讀取Bean定義文件,並生成各個實例。 初始化 2 . 依賴注入 3.setBeanName() 4.setBeanFactory() 5.processBeforeInitialization() 初始化以前都會執行這個實例的processBeforeInitialization()方法。 6.afterPropertiesSet() 7.init-method 8.processAfterInitialization() 業務邏輯 9.使用Bean作一些業務邏輯
銷燬 10.destroy() 11.destroy-method
七、 Bean的做用域
Singleton: 這是默認的做用域,這種範圍確保無論接受多少個請求,每一個容器中只有一個bean的實例,單例模式有BeanFactory自身維護;
Prototype: 原形範圍與單例範圍相反,爲每個bean請求提供一個實例;
Request: 在請求bean範圍內會爲每個來自客戶端的網絡請求建立一個實例,在請求完成之後,bean會失效並被垃圾回收器回收;
Session: 與請求範圍相似,確保每一個session中有一個bean的實例,在session過時後,bean會隨之失效;
八、 Servlet生命週期
九、 設值注入和構造注入及其區別 設值注入:類中定義setter()方法,在配置文件中注入參數
property name="country" value="China" />
構造注入:類中聲明一個構造方法,並在此方法的參數中定義要注入的對象。
設值注入優勢
構造注入優勢
建議:採用設值注入爲主,構造注入爲輔的注入策略。對於依賴關係無需變化的注入,儘可能採用構造注入;而其它的依賴關係的注入,則考慮設值注入。
十、 Spring實例化bean的三種方法 1.經過構造函數
2.經過靜態工廠方法
3.經過實例工廠方法 Bean的參數有id、class、factory-bean、factory-method等
十一、 Spring事物管理簡單介紹 包括聲明式事務和編程式事務,編程式的,比較靈活,可是代碼量大,存在重複的代碼比較多;聲明式的比編程式的更靈活,最大的好處是大大減小了代碼量。編程式不經常使用,接下來介紹聲明式事務管理。
聲明式事務管理創建在AOP之上的,動態代理實現其機制(不改變源碼,對原有的功能動態擴展)。聲明式事務管理使業務代碼不受污染,這正是spring倡導的非侵入式的開發方式。聲明式事物處理也有五種不一樣的配置方式,單經常使用的是基於 @Transactional註解的聲明式事務管理。此時在DAO上需加上@Transactional註解,在須要事務處理的類或方法上均可以加。
Spring配置文件中關於事務配置老是由三個組成部分,分別是DataSource、TransactionManager和代理機制這三部分,不管哪一種配置方式,通常變化的只是代理機制這部分。
TransactionDefinition接口定義了四種事物屬性是咱們須要知道的
事物傳播行爲 在開始當前事務以前,一個事務上下文已經存在,此時有若干選項能夠指定一個事務性方法的執行行爲。 TransactionDefinition.PROPAGATION_REQUIRED:若是當前存在事務,則加入該事務;若是當前沒有事務,則建立一個新的事務。這是默認值。 TransactionDefinition.PROPAGATION_REQUIRES_NEW:建立一個新的事務,若是當前存在事務,則把當前事務掛起。 TransactionDefinition.PROPAGATION_SUPPORTS:若是當前存在事務,則加入該事務;若是當前沒有事務,則以非事務的方式繼續運行。 TransactionDefinition.PROPAGATION_NOT_SUPPORTED:以非事務方式運行,若是當前存在事務,則把當前事務掛起。 TransactionDefinition.PROPAGATION_NEVER:以非事務方式運行,若是當前存在事務,則拋出異常。 TransactionDefinition.PROPAGATION_MANDATORY:若是當前存在事務,則加入該事務;若是當前沒有事務,則拋出異常。 TransactionDefinition.PROPAGATION_NESTED:若是當前存在事務,則建立一個事務做爲當前事務的嵌套事務來運行;若是當前沒有事務,則該取值等價於TransactionDefinition.PROPAGATION_REQUIRED。
事物隔離級別 TransactionDefinition.ISOLATION_DEFAULT:這是默認值,表示使用底層數據庫的默認隔離級別。對大部分數據庫而言,一般這值就是TransactionDefinition.ISOLATION_READ_COMMITTED。 TransactionDefinition.ISOLATION_READ_UNCOMMITTED:該隔離級別表示一個事務能夠讀取另外一個事務修改但尚未提交的數據。該級別不能防止髒讀,不可重複讀和幻讀,所以不多使用該隔離級別。好比PostgreSQL實際上並無此級別。 TransactionDefinition.ISOLATION_READ_COMMITTED:該隔離級別表示一個事務只能讀取另外一個事務已經提交的數據。該級別能夠防止髒讀,這也是大多數狀況下的推薦值。 TransactionDefinition.ISOLATION_REPEATABLE_READ:該隔離級別表示一個事務在整個過程當中能夠屢次重複執行某個查詢,而且每次返回的記錄都相同。該級別能夠防止髒讀和不可重複讀。 TransactionDefinition.ISOLATION_SERIALIZABLE:全部的事務依次逐個執行,這樣事務之間就徹底不可能產生干擾,也就是說,該級別能夠防止髒讀、不可重複讀以及幻讀。可是這將嚴重影響程序的性能。一般狀況下也不會用到該級別。
事務超時: 所謂事務超時,就是指一個事務所准許實行的最長時辰,假定跨越該時辰限制但事務尚未完成,則自動回滾事務。
事務只讀屬性: 只讀事務用於客戶代碼只讀但不修改數據的情形,只讀事務用於特定情景下的優化,好比使用Hibernate的時候
十二、 SpringMVC流程:
注:喜歡的小夥伴能夠點贊加一波關注,一塊兒學習進步