最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

后端 | SSM框架 | Spring

2023-08-06 16:20 作者:朵寶特工007  | 我要投稿

筆記來(lái)源:黑馬程序員SSM框架教程_Spring+SpringMVC+Maven高級(jí)+SpringBoot+MyBatisPlus企業(yè)實(shí)用開(kāi)發(fā)技術(shù)

一、核心概念

代碼書寫現(xiàn)狀:耦合度高。

解決方案:使用對(duì)象時(shí),在程序中不要主動(dòng)new產(chǎn)生對(duì)象,轉(zhuǎn)換為由外部提供對(duì)象。

1、IOC(Inversion Of Control)控制反轉(zhuǎn)

  • 對(duì)象的創(chuàng)建控制權(quán)由程序轉(zhuǎn)移到外部,這種思想稱為控制反轉(zhuǎn)。

Spring技術(shù)對(duì)IOC思想的實(shí)現(xiàn):

  • Spring提供了一個(gè)容器,稱為IOC容器,用來(lái)充當(dāng)IOC思想中的“外部”。

  • IOC容器負(fù)責(zé)對(duì)象的創(chuàng)建、初始化等一系列工作,被創(chuàng)建或被管理的對(duì)象在IOC容器中統(tǒng)稱為Bean。

2、DI(Dependency Injection)依賴注入

  • 在容器中建立bean與bean之間的依賴關(guān)系的整個(gè)過(guò)程,稱為依賴注入。


二、IOC入門

  • 導(dǎo)入Spring坐標(biāo):

  • 定義Spring管理的類(接口):

  • 創(chuàng)建Spring配置文件,配置對(duì)應(yīng)類作為Spring管理的bean:

  • 初始化IOC容器(Spring核心容器/Spring容器),通過(guò)容器獲取bean:


三、DI入門

1、依賴注入方式

  • setter注入——引用類型、簡(jiǎn)單類型:

    • 刪除使用new的形式創(chuàng)建對(duì)象的代碼,在bean中定義引用類型、簡(jiǎn)單類型屬性并提供可訪問(wèn)的set方法。

  • 配置中使用property標(biāo)簽ref屬性注入引用類型對(duì)象、value屬性注入簡(jiǎn)單類型數(shù)據(jù)。

  • 構(gòu)造器注入——引用類型、簡(jiǎn)單類型:

    • 在bean中定義引用類型、簡(jiǎn)單類型屬性,并提供可訪問(wèn)的構(gòu)造方法。

  • 配置中使用constructor-arg標(biāo)簽注入引用類型對(duì)象、簡(jiǎn)單類型數(shù)據(jù)。

2、依賴注入方式選擇

  • 強(qiáng)制依賴使用構(gòu)造器進(jìn)行,使用setter注入有概率不進(jìn)行注入導(dǎo)致null對(duì)象出現(xiàn)。

  • 可選依賴使用setter注入進(jìn)行,靈活性強(qiáng)。

  • Spring容器倡導(dǎo)使用構(gòu)造器,第三方框架內(nèi)部大多數(shù)采用構(gòu)造器注入的形式進(jìn)行數(shù)據(jù)初始化,相對(duì)嚴(yán)謹(jǐn)。

  • 如果有必要可以兩者同時(shí)使用,使用構(gòu)造器注入完成強(qiáng)制依賴的注入,使用setter注入完成可選依賴的注入。

  • 實(shí)際開(kāi)發(fā)過(guò)程中還要根據(jù)實(shí)際情況分析,如果受控對(duì)象沒(méi)有提供setter方法就必須使用構(gòu)造器注入。

  • 自己開(kāi)發(fā)的模塊推薦使用setter注入。


四、bean

1、bean的基礎(chǔ)配置

  • bean別名配置:使用name屬性,可定義多個(gè),多個(gè)之間使用逗號(hào)、分號(hào)和空格分隔。

  • bean作用范圍配置:使用scope屬性,可選值為singleton(默認(rèn)值,單例)、prototype(非單例)。

2、bean的實(shí)例化

  • 構(gòu)造方法(常用):提供可訪問(wèn)的構(gòu)造方法。

  • 靜態(tài)工廠:

  • 實(shí)例工廠:

  • FactoryBean:

3、bean的生命周期

  • 生命周期:

    • 初始化容器:創(chuàng)建對(duì)象(內(nèi)存分配)、執(zhí)行構(gòu)造方法、執(zhí)行屬性注入(set操作)、執(zhí)行bean初始化方法。

    • 使用bean:執(zhí)行業(yè)務(wù)操作。

    • 關(guān)閉/銷毀容器:執(zhí)行bean銷毀方法。

  • 生命周期控制:

    • 提供生命周期控制方法:

  • 配置生命周期控制方法:

  • 接口控制:

  • 銷毀時(shí)機(jī):

    • 容器關(guān)閉前觸發(fā)bean的銷毀。

    • 關(guān)閉容器方式:

      • 手工關(guān)閉容器:ConfigurableApplicationContext接口close()操作。

      • 注冊(cè)關(guān)閉鉤子,在虛擬機(jī)退出前先關(guān)閉容器再退出虛擬機(jī),ConfigurableApplicationContext接口registerShutdownHook()操作。

4、依賴自動(dòng)裝配

  • IOC容器根據(jù)bean所依賴的資源在容器中自動(dòng)查找并注入到bean的過(guò)程中稱為自動(dòng)裝配。

  • 自動(dòng)裝配方式:配置中使用bean標(biāo)簽autowire屬性設(shè)置自動(dòng)裝配的類型

    • 按類型(常用)

    • 按名稱

    • 按構(gòu)造方法

    • 不啟用自動(dòng)裝配

  • 自動(dòng)裝配特征:

    • 自動(dòng)裝配用于引用類型依賴注入,不能對(duì)簡(jiǎn)單類型進(jìn)行操作。

    • 使用按類型裝配時(shí)(byType)必須保障容器中相同類型的bean唯一,推薦使用。

    • 使用按名稱裝配時(shí)(byName)必須保障容器中具有指定名稱的bean,因變量名和配置耦合,不推薦使用。

    • 自動(dòng)裝配優(yōu)先級(jí)低于setter注入和構(gòu)造器注入,同時(shí)出現(xiàn)時(shí)自動(dòng)裝配配置失效。


、集合注入

  • 數(shù)組、List、Set、Map、Properties


六、加載properties文件

  • 開(kāi)啟context命名空間

  • 使用context命名空間,加載指定properties文件

  • 使用${}讀取加載的屬性值

  • 其他

    • 不加載系統(tǒng)屬性

  • 加載多個(gè)properties文件

  • 加載所有properties文件

  • 加載properties文件標(biāo)準(zhǔn)格式

  • 從類路徑或jar包中搜索并加載properties文件


七、容器

1、創(chuàng)建容器

  • 類路徑加載配置文件

  • 文件路徑加載配置文件

  • 加載多個(gè)配置文件

2、獲取bean

  • 使用bean名稱獲取

  • 使用bean名稱獲取并指定類型

  • 使用bean類型獲取


八、注解開(kāi)發(fā)

1、注解開(kāi)發(fā)定義bean

  • 使用@Component定義bean

  • 核心配置文件中通過(guò)組件掃描加載bean

Spring提供@Component注解的三個(gè)衍生注解:

  • @Controller:用于表現(xiàn)層bean定義

  • @Service:用于業(yè)務(wù)層bean定義

  • @Respository:用于數(shù)據(jù)層bean定義

2、純注解開(kāi)發(fā)模式

  • Spring3.0開(kāi)啟了純注解開(kāi)發(fā)模式,使用Java類替代配置文件,開(kāi)啟了Spring快速開(kāi)發(fā)賽道。

  • Java類代替Spring核心配置文件。

  • @Configuration注解用于設(shè)置當(dāng)前類為配置類。

  • @ComponentScan注解用于設(shè)定掃描路徑,此注解只能添加一次,多個(gè)數(shù)據(jù)請(qǐng)用數(shù)組格式。

  • 讀取Spring核心配置文件初始化容器對(duì)象切換為讀取Java配置類初始化容器對(duì)象。

3、bean管理

  • 作用范圍:使用@Scope定義bean作用范圍。

  • 生命周期:使用@PostConstruct、@PreDestory定義bean生命周期。

4、依賴注入

  • 使用@Autowired注解開(kāi)啟自動(dòng)裝配模式(按類型)。

    • 注意:

      • 自動(dòng)裝配基于反射設(shè)計(jì)創(chuàng)建對(duì)象并暴力反射對(duì)應(yīng)屬性為私有屬性初始化數(shù)據(jù),因此無(wú)需提供setter方法。

      • 自動(dòng)裝配建議使用無(wú)參構(gòu)造方法創(chuàng)建對(duì)象(默認(rèn)),如果不提供對(duì)應(yīng)構(gòu)造方法,請(qǐng)?zhí)峁┪ㄒ坏臉?gòu)造方法。

  • 使用@Qualifier注解開(kāi)啟指定名稱裝配bean。

    • 注意:

      • @Qualifier注解無(wú)法單獨(dú)使用,必須配合@Autowired注解使用。

  • 使用@Value實(shí)現(xiàn)簡(jiǎn)單類型注入。

  • 注意:

    • 路徑僅支持單一文件配置,多文件使用數(shù)組格式配置,不允許使用通配符*。

5、第三方bean管理

  • 使用@Bean配置第三方bean。

  • 使用獨(dú)立的配置類管理第三方bean。

  • 導(dǎo)入式:獨(dú)立的配置類不加@Configuration,使用@Import注解導(dǎo)入獨(dú)立的配置類,@Import注解只能寫一次,如果要導(dǎo)入多個(gè)獨(dú)立配置類,以數(shù)組形式導(dǎo)入。

  • 掃描式:獨(dú)立的配置類加@Configuration,使用@ComponentScan注解掃描配置類所在的包,加載對(duì)應(yīng)的配置類信息。

6、第三方bean依賴注入

  • 簡(jiǎn)單類型依賴注入:

  • 引用類型依賴注入:

  • 引用類型注入只需要為bean提供方法設(shè)置形參即可,容器會(huì)根據(jù)類型自動(dòng)裝配對(duì)象。


九、AOP

1、AOP簡(jiǎn)介

AOP(Aspect Oriented Programming)面向切面編程,一種編程范式,指導(dǎo)開(kāi)發(fā)者如何組織程序結(jié)構(gòu)。

作用:在不驚動(dòng)原始設(shè)計(jì)的基礎(chǔ)上為其進(jìn)行功能增強(qiáng)。

  • AOP核心概念

    • 連接點(diǎn)(JoinPoint):程序執(zhí)行過(guò)程中的任意位置,粒度為執(zhí)行方法、拋出異常、設(shè)置變量等。在SpringAOP中,理解為方法的執(zhí)行。

    • 切入點(diǎn)(PointCut):匹配連接點(diǎn)的式子。在SpringAOP中,一個(gè)切入點(diǎn)可以只描述一個(gè)具體方法,也可以匹配多個(gè)方法。

    • 通知(Advice):在切入點(diǎn)處執(zhí)行的操作,也就是共性能力。在SpringAOP中,功能最終以方法的形式呈現(xiàn)。

    • 通知類:定義通知的類。

    • 切面(Aspect):描述通知與切入點(diǎn)的對(duì)應(yīng)關(guān)系。

2、AOP入門案例

  • 導(dǎo)入AOP相關(guān)坐標(biāo)

  • 定義dao接口與實(shí)現(xiàn)類

  • 定義通知類,制作通知

  • 定義切入點(diǎn)(切入點(diǎn)依托一個(gè)不具有實(shí)際意義的方法進(jìn)行,即無(wú)參數(shù),無(wú)返回值,方法體無(wú)實(shí)際邏輯)

  • 綁定切入點(diǎn)與通知關(guān)系,并指定通知添加到原始連接點(diǎn)的具體執(zhí)行位置

  • 定義通知類受Spring容器管理,并定義當(dāng)前類為切面類

  • 開(kāi)啟Spring對(duì)AOP注解驅(qū)動(dòng)支持

3、AOP工作流程

  • Spring容器啟動(dòng)

  • 讀取所有切面配置中(使用的)的切入點(diǎn)

  • 初始化bean,判定bean對(duì)應(yīng)的類中的方法是否匹配到任意切入點(diǎn)

    • 匹配失敗,創(chuàng)建對(duì)象。

    • 匹配成功,創(chuàng)建原始對(duì)象(目標(biāo)對(duì)象)的代理對(duì)象。

  • 獲取bean執(zhí)行方法

    • 獲取bean,調(diào)用方法并執(zhí)行,完成操作。

    • 獲取的bean是代理對(duì)象時(shí),根據(jù)代理對(duì)象的運(yùn)行模式運(yùn)行原始方法與增強(qiáng)的內(nèi)容,完成操作。

AOP核心概念:

  • 目標(biāo)對(duì)象(Target):原始功能去掉共性功能對(duì)應(yīng)的類產(chǎn)生的對(duì)象,這種對(duì)象是無(wú)法直接完成最終工作的。

  • 代理(Proxy):目標(biāo)對(duì)象無(wú)法直接完成工作,需要對(duì)其進(jìn)行功能回填,通過(guò)原始對(duì)象的代理對(duì)象實(shí)現(xiàn)。

4、AOP切入點(diǎn)表達(dá)式

  • 切入點(diǎn):要進(jìn)行增強(qiáng)的方法。

  • 切入點(diǎn)表達(dá)式:要進(jìn)行增強(qiáng)的方法的描述方式。

  • 切入點(diǎn)表達(dá)式標(biāo)準(zhǔn)格式:動(dòng)作關(guān)鍵詞(訪問(wèn)修飾符 返回值 包名.類/接口名.方法名(參數(shù))異常名)

  • 可以使用通配符描述切入點(diǎn),快速描述

    • *:?jiǎn)蝹€(gè)獨(dú)立的任意符號(hào),可以獨(dú)立出現(xiàn),也可以作為前綴或者后綴的匹配符出現(xiàn)。

  • ..:多個(gè)連續(xù)的任意符號(hào),可以獨(dú)立出現(xiàn),常用于簡(jiǎn)化包名與參數(shù)的書寫。

  • +:專用于匹配子類類型。

5、AOP通知類型

  • AOP通知描述了抽取的共性功能,根據(jù)共性功能抽取的位置不同,最終運(yùn)行代碼時(shí)要將其加入到合理的位置。

  • AOP通知分類:

    • 前置通知:@Before

    • 后置通知:@After

    • 環(huán)繞通知:@Around

      • 環(huán)繞通知必須依賴形參ProceedingJoinPoint才能實(shí)現(xiàn)對(duì)原始方法的調(diào)用,進(jìn)而實(shí)現(xiàn)原始方法調(diào)用前后添加通知。

      • 通知中如果未使用ProceedingJoinPoint對(duì)原始方法進(jìn)行調(diào)用將跳過(guò)原始方法的執(zhí)行。

      • 對(duì)原始方法的調(diào)用可以不接收返回值,通知方法設(shè)置成void即可,如果接收返回值,必須設(shè)定為Object類型。

      • 原始方法的返回值如果是void類型,通知方法的返回值類型可以設(shè)置為void,也可以設(shè)置為Object。

      • 由于無(wú)法預(yù)知原始方法運(yùn)行后是否會(huì)拋出異常,因此環(huán)繞通知方法必須拋出Throwable對(duì)象。

  • 返回后通知:@AfterReturning

  • 拋出異常后通知:@AfterThrowing

6、AOP通知獲取數(shù)據(jù)

  • 獲取切入點(diǎn)方法的參數(shù)

    • JoinPoint:適用于前置、后置、返回后、拋出異常后通知

    • ProceedJoinPoint:適用于環(huán)繞通知

  • 獲取切入點(diǎn)方法的返回值

    • 返回后通知

    • 環(huán)繞通知

  • 獲取切入點(diǎn)方法的異常

    • 拋出異常后通知

    • 環(huán)繞通知


十、Spring事務(wù)

1、Spring事務(wù)簡(jiǎn)介

  • 事務(wù)作用:在數(shù)據(jù)層保障一系列的數(shù)據(jù)庫(kù)操作同成功同失敗。

  • Spring事務(wù)作用:在數(shù)據(jù)層或業(yè)務(wù)層保障一系列的數(shù)據(jù)庫(kù)操作同成功同失敗。

2、Spring事務(wù)角色

  • 事務(wù)管理員:發(fā)起事務(wù)方,在Spring中通常指代業(yè)務(wù)層開(kāi)始事務(wù)的方法。

  • 事務(wù)協(xié)調(diào)員:加入事務(wù)方,在Spring中通常指代數(shù)據(jù)層方法,也可以是業(yè)務(wù)層方法。

3、Spring事務(wù)配置屬性

  • readOnly:設(shè)置是否為只讀事務(wù)。

  • timeout:設(shè)置事務(wù)超時(shí)時(shí)間,timeout=-1表示永不超時(shí)。

  • rollbackFor:設(shè)置事務(wù)回滾異常(class)。

  • rollbackForClassName:設(shè)置事務(wù)回滾異常(String)。

  • noRollbackFor:設(shè)置事務(wù)不回滾異常(class)。

  • noRollbackForClassName:設(shè)置事務(wù)不回滾異常(String)。

  • propagation:設(shè)置事務(wù)傳播行為。

    • REQUIRED(默認(rèn)):事務(wù)管理員有事務(wù),事務(wù)協(xié)調(diào)員就加入;事務(wù)管理員無(wú)事務(wù),事務(wù)協(xié)調(diào)員就新建事務(wù)。

    • REQUIRED_NEW:事務(wù)管理員有無(wú)事務(wù),事務(wù)協(xié)調(diào)員都新建事務(wù)。

    • SUPPORTS:事務(wù)管理員有事務(wù),事務(wù)協(xié)調(diào)員就加入;事務(wù)管理員無(wú)事務(wù),事務(wù)協(xié)調(diào)員也無(wú)事務(wù)。

    • NOT_SUPPORTED:事務(wù)管理員有無(wú)事務(wù),事務(wù)協(xié)調(diào)員都無(wú)事務(wù)。

    • MANDATORY:事務(wù)管理員有事務(wù),事務(wù)協(xié)調(diào)員就加入;事務(wù)管理員無(wú)事務(wù),事務(wù)協(xié)調(diào)員就報(bào)錯(cuò)。

    • NEVER:事務(wù)管理員有事務(wù),事務(wù)協(xié)調(diào)員就報(bào)錯(cuò);事務(wù)管理員無(wú)事務(wù),事務(wù)協(xié)調(diào)員也無(wú)事務(wù)。

    • NESTED:設(shè)置savePoint,一旦事務(wù)回滾,事務(wù)將回滾到savePoint處,交由客戶響應(yīng)提交/回滾。










后端 | SSM框架 | Spring的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
泽州县| 靖宇县| 大同县| 邵武市| 南京市| 改则县| 万全县| 南开区| 伊吾县| 册亨县| 鄂尔多斯市| 琼结县| 上栗县| 永年县| 武夷山市| 定日县| 奉贤区| 浪卡子县| 西乡县| 东辽县| 黑水县| 修文县| 六盘水市| 阿拉尔市| 栾城县| 商南县| 安图县| 巍山| 云霄县| 纳雍县| 石景山区| 阿克| 罗山县| 兴城市| 合山市| 西藏| 萨嘎县| 崇信县| 磐石市| 甘德县| 集贤县|