一:概述(知道)
Spring簡介
Spring是以IOC和AOP為內(nèi)核的full-stack輕量級開源框架Spring是以IOC和AOP為內(nèi)核的full-stack輕量級開源框架
Spring發(fā)展歷程
2004 年 03 月,1.0 版發(fā)布。
2006 年 10 月幽污,2.0 版發(fā)布。
2007 年 11 月煤墙,更名為 SpringSource,同時發(fā)布了 Spring 2.5顾患。
2009 年 12 月番捂,Spring 3.0 發(fā)布个唧。
2013 年 12 月江解,Pivotal 宣布發(fā)布 Spring 框架 4.0。
2017 年 09 月徙歼,Spring 5.0 發(fā)布
Spring優(yōu)勢
解耦
Spring就是一個大工廠犁河,可以將所有對象的創(chuàng)建和依賴關(guān)系的維護工作都交給Spring容器的管理,大大的降低了組件之間的耦合性魄梯。
Aop編程支持
Spring提供了對AOP的支持桨螺,它允許將一些通用任務(wù),如安全酿秸、事物灭翔、日志等進行集中式處理,從而提高了程序的復(fù)用性辣苏。
聲明式事務(wù)
只需要通過配置就可以完成對事物的管理肝箱,而無須手動編程。
對測試的支持
Spring提供了對Junit4的支持稀蟋,可以通過注解方便的測試Spring程序煌张。
方便集成各種優(yōu)秀框架
Spring不排斥各種優(yōu)秀的開源框架,其內(nèi)部提供了對各種優(yōu)秀框架(如Struts退客、Hibernate骏融、MyBatis链嘀、Quartz等)的直接支持。
** 對JavaEE API的封裝**
Spring對Java EE開發(fā)中非常難用的一些API(如JDBC档玻、JavaMail等)怀泊,都提供了封裝,使這些API應(yīng)用難度大大降低误趴。
優(yōu)秀的源碼
Spring核心結(jié)構(gòu)
模塊化思想的體現(xiàn)
Spring-Core
Spring-Aop
Spring-Dao
Spring-Context
Spring-Web
Spring-ORM
二:核心思想(理解)
IOC 控制反轉(zhuǎn)
什么是IoC
創(chuàng)建對象的權(quán)利反轉(zhuǎn)給框架包个,不需要我們自己new對象了,我們喪失了創(chuàng)建對象的權(quán)利冤留,但是也得到了福利碧囊,不需要我們來管理對象了
IoC解決什么問題
解決對象之間耦合問題
IOC和DI的區(qū)別
同一件事情不同角度的描述
AOP 面向切面編程
橫切邏輯:多個縱向流程中出現(xiàn)的重復(fù)子流程邏輯
本質(zhì)
在不改變原有業(yè)務(wù)邏輯代碼的情況下,增強橫切邏輯纤怒,避免橫切邏輯代碼重復(fù)
為什么叫面向切面編程
切:橫切邏輯糯而,原有業(yè)務(wù)邏輯不能動
面:橫切代碼影響的往往是很多方法,構(gòu)成了一個面
三:手寫實現(xiàn)IOC和AOP(掌握)
分析案例泊窘,找出問題
問題一:new關(guān)鍵字將service層的實現(xiàn)類TransferServiceImpl
和Dao層的具體實現(xiàn)類JdbcAccountDaoImpl耦合在了一起熄驼,當需要切換Dao層實現(xiàn)類的時候必須得修改service代碼,不符合面向接口開發(fā)的最優(yōu)原則
問題二:service層沒有添加事務(wù)控制烘豹,出現(xiàn)異彻霞郑可能導(dǎo)致數(shù)據(jù)錯亂,問題很嚴重携悯,尤其在金融銀行行業(yè)祭芦。
針對問題提出解決方案
針對問題一
手寫IOC
反射+工廠模式
針對問題二
事務(wù)失效原因-->每次操作數(shù)據(jù)庫都是一個新的連接
按照解決方案完成編碼
1、ConnectionUtils提供了一個獲取當前線程綁定Connection的方法
2憔鬼、Service層事務(wù)管理邏輯代碼單獨提取為了事務(wù)管理器類TransactionManager(事務(wù)的開啟龟劲、提交、回滾)
3轴或、我們不可能給每一個方法添加TCF代碼塊來控制事務(wù)昌跌,所以使用動態(tài)代理技術(shù),開發(fā)ProxyFactory
四:Spring IOC的應(yīng)用(掌握)
說明
Bean定義方式不同照雁、JavaSE/JavaEE環(huán)境不同蚕愤,導(dǎo)致容器啟動方式也會不同
BeanFactory和ApplicationContext的區(qū)別
Spring中IOC容器的頂級接口,定義基礎(chǔ)規(guī)范饺蚊;
ApplicationContext是容器的高級接口萍诱,比BeanFactory擁有更多的功能(比如XML讀取)
IOC三種模式
模式一:純XML模式
創(chuàng)建Bean的三種方式
class指定全限定類名卸勺,通過無參構(gòu)造器創(chuàng)建
靜態(tài)方法創(chuàng)建
實例化方法創(chuàng)建
Bean標簽屬性
id
class
scope
singleton
prototype
生命周期屬性
init-method
destory-method
name
factory-bean
factory-method
DI依賴注入
構(gòu)造器注入
使用<constructor-arg>標簽
set注入
使用<property>標簽砂沛,ref屬性用于注入其它bean,value屬性用于注入普通數(shù)值
模式二:XML+注解模式
模式三:純注解模式
原則:從xml開始曙求,學(xué)習(xí)注解時將xml中標簽碍庵、屬性與注解一一對應(yīng)即可
IOC高級特性
lazy-init(了解)
FactoryBean和BeanFactory(重點)
BeanFactory是IOC容器的核心接口映企,它主要作用就是實例化、定位静浴、配置應(yīng)用程序中的對象及建立這些對象間的依賴堰氓。
是一個工廠Bean,可以生成某一個類型Bean實例苹享,它最大的一個作用是:可以讓我們自定義Bean的創(chuàng)建過程
后置處理器(重點)
BeanPostProcessor双絮,Bean對象后置處理器
BeanFactoryPostProcessor,Bean工廠后置處理器
BeanFactory初始化之后可以使用這個后置處理器做一些事情
其他
SpringBean生命周期
BeanDefinition對象
我們在 XML 中定義的 bean標簽得问,Spring 解析 bean 標簽成為?個 JavaBean囤攀,這個JavaBean 就是 BeanDefinition
五:Spring IOC源碼深度剖析
好處
提?培養(yǎng)代碼架構(gòu)思維、深?理解框架
源碼剖析技巧
原則
定焦原則:抓主線
宏觀原則:站在上帝視?宫纬,關(guān)注源碼結(jié)構(gòu)和業(yè)務(wù)流程(淡化具體某?代碼的編寫細節(jié))
?法和技巧
斷點(觀察調(diào)?棧)
反調(diào)(Find Usages)
經(jīng)驗(spring框架中doXXX焚挠,做具體處理的地?)
流程分析
循環(huán)依賴
循環(huán)依賴其實就是循環(huán)引?,也就是兩個或者兩個以上的 Bean 互相持有對?漓骚,最終形成閉環(huán)
場景
構(gòu)造器的循環(huán)依賴(構(gòu)造器注?)
Field 屬性的循環(huán)依賴(set注?)
六:Spring AOP應(yīng)用(掌握)
AOP相關(guān)術(shù)語
連接點JoinPoint
每個個方法的特殊時機點都是連接點蝌衔,是一種候選點
切入點PointCut
用于定位真正感興趣的方法
增強Advice
橫切邏輯+訪問信息(具體哪種連接點)
目標對象Target
代理對象Proxy
織入Weaving
切面Aspect
切面=切入點+增強=切入點+橫切邏輯+方位信息
注意:這么多的概念,目的就是為了鎖定在哪個地方插入什么橫切邏輯代碼
Spring AOP配置
XML配置
XML+注解
純注解
Spring 聲明式事務(wù)
回顧事務(wù)基本知識
四大特性蝌蹂、并發(fā)問題噩斟、隔離級別、傳播行為
配置方式
xml配置
xml+注解
純注解
七:Spring AOP源碼剖析
代理對象創(chuàng)建流程
聲明式事務(wù)控制組件分析--->從@EnableTransactionManagement開始