spring

一:概述(知道)

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ù)子流程邏輯
image.png
本質(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開始
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末孤个,一起剝皮案震驚了整個濱河市剃允,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌硼身,老刑警劉巖硅急,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件覆享,死亡現(xiàn)場離奇詭異佳遂,居然都是意外死亡,警方通過查閱死者的電腦和手機撒顿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門丑罪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人凤壁,你說我怎么就攤上這事吩屹。” “怎么了拧抖?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵煤搜,是天一觀的道長。 經(jīng)常有香客問我唧席,道長擦盾,這世上最難降的妖魔是什么嘲驾? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮迹卢,結(jié)果婚禮上辽故,老公的妹妹穿的比我還像新娘。我一直安慰自己腐碱,他們只是感情好誊垢,可當我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著症见,像睡著了一般喂走。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上谋作,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天缴啡,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛岛都,可吹牛的內(nèi)容都是我干的魂爪。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼更啄,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起帮孔,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎不撑,沒想到半個月后文兢,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡焕檬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年姆坚,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片实愚。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡兼呵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出腊敲,到底是詐尸還是另有隱情击喂,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布碰辅,位于F島的核電站懂昂,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏没宾。R本人自食惡果不足惜凌彬,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一潮尝、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧饿序,春花似錦勉失、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至咽弦,卻和暖如春徒蟆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背型型。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工段审, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人闹蒜。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓寺枉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親绷落。 傳聞我的和親對象是個殘疾皇子姥闪,可洞房花燭夜當晚...
    茶點故事閱讀 43,440評論 2 348