ssm復習

Spring Framework系統架構

核心容器的學習

IOC/DI

IOC容器

IOC

????????使用對象時,由主動new產生的對象轉換為由外部提供對象,此過程中對象的創建的控制權交由外部,此思想稱為控制反轉,? ?(實現了自己new的解耦)? 對象創建的控制權

Spring提供一個容器,稱為IOC容器 用來充當IOC思想的外部

Bean

IOC容器負責對象創建,初始化,等一系列的操作,被創建或被管理的對象在IOC容器中統稱為Bean

DI

在容器中建立bean與bean之間的依賴關系的整個過程,稱為依賴注入

核心概念? :

充分解耦? ?使用IOC管理bean? 使用DI依賴注入進行綁定

最終效果? :使用對象時不僅可以從IOC中直接獲取,并且獲取到的Bean已經綁定了所有的依賴關系

?IOC入門

管理什么---------------service與dao

如何將被管理的對象告知IOC容器? -------------配置

被管理的對象交由IOC容器,如何獲取到IOC容器-----------接口

如何從容器中獲取bean-----------接口方法

使用Spring獲取到----------pom.xml

DI入門

?如何將Dao對象進入到Service中 (提供set方法)

Servic與Dao的關系如何描述? (配置)

bean配置

單例模式,(默認)? 多例

為什么用單例?? scope? si? ??

不適合的給容器管理的bean封裝實體的域對象

name可以配置多個名字

bean的實例化

實例化的三中的方式

1使用構造方法

調用的是無參的構造方法 構造方法的不管是公共的還是私有的都能調用,反射

技巧:? ?Spring的報錯觀察最下面

2-----靜態工廠的實例化? ?

工廠的創建對象的方法是靜態的? 直接寫到里面

配置上class = factory 然后后面添加工廠的方法的

為什么不直接new對象? ? ? ? ?原因可以在工廠中對 對象的功能的增強

3實例工廠初始化bean?

工廠的創建bean的方法是非靜態的 所以先要創建工廠對象,然后通過工廠對象創建bean

? 為什么創建一個無用的工廠bean累贅

改良---------? 使用FactoryBean實例化? ? ? ? ?<實用>

Bean的聲明周期

從創建到銷毀的整個過程

初始化容器,

創建對象

執行構造方法

執行屬性注入set操作

執行bean的初始化方法

使用bean

執行業務操作

關閉銷毀容器

執行bean的銷毀

依賴注入的方式-----DI

?注入的類型? ------------基本類型,引用類型

自動裝配

???????IOC容器根據bean所依賴的資源在容器中自動查找并注入到bean中的過程叫做自動裝配

自動裝配的方式

1 按照類型

2 按照名稱

3 構造方法注入

4 不啟動自動裝配

在service要想自動裝配dao要使用setter方法,然以配置中使用bytype

按照類型匹配必須要求類型唯一

按照名稱裝配? ?id和set方法后面的一致? ?要求名稱必須一致? ?變量名與配置耦合,不推薦

自動裝配用于引用類型的操作,不用于簡單類型的進行操作,

自動裝配的優先級低于setter方法和構造方法注入,同時出現會失效

數據源對象管理? ?第三方bean的管理

對象交由我們管理,將對應的屬性提供過去,(set方法注入)


容器

1 ,加載類路徑下的配置文件 -------------獲取容器

2,?獲取bean??

BeanFactory接口最頂層的接口? 最早期的容器接口

beanFactory的操作

兩者的區別

beanfactory加載是延遲加載? ? ?application初始化的bean是立即加載的

注解

?bean的作用范圍? bean生命周期

單例加@scope? ? prototype? ? ? Singleton

bean的聲明周期

初始化方法:-----(在構造方法之后運行) 在方法上加@PostConstruct

bean銷毀之前------@PreDestroy

bean銷毀之前的操作記得? 關閉容器和關閉鉤子才能運行

?依賴注入----------自動裝配? ? ? ?

引用類型

?@Autowired? ? ? ? ?

原理按照類型裝配??

若是有多個相同類型的bean使用@Qualifier指定名稱? ?(需要依賴@Aut? 一起用)

?注意:自動裝配基于反射設計創建對象并暴力反射對應的私有屬性初始化的數據,因此無需提供setter方法

自動裝配記得提供無參的構造方法,(不提供造不出對象)

簡單類型

@Value

加載外部的prop文件? 配置的文件加載到bean中使用

1 寫配置文件

2 配置文件上加注解? ?propertySource(文件地址)? ----------不支持通配符*

3 使用

第三方bean的管理?

@Bean 添加這個表示方法的返回值是bean

?返回值就是所需要的bean

不建議直接 寫入Springconfig中

新創建一個Config類然后導入SpringConfig配置中

?如果配置類中缺少東西? 如簡單類型? ?引用類型

簡單類型

Springconfig 配置文件上寫???propertySource加載這個簡單類型的數據文件地址 然后在用的地方直接@value

引用類型

假定需要使用dao? ? ?給個類型,Spring直接給你

原理自動裝配? ?在容器中給你找這個bean給你自動裝配進去? (按照類型裝配)

注解和xml配置比較

注意? :? bean定義完在再文件中,注解Component需要我們識別出來,掃描bean的包

Spring整合Mybatis

運行類

配置類

?核心對象SqlSessionFactory??

mybatis管理的就是sqsessionFactory對象

第三方bean的管理? ?

記得Springconfig 導入該配置

?創建sqlsessionFacoryBean

?AOP

面向切面編程

不驚動原始設計的基礎上為其進行功能的增強

無侵入式/無入侵式? ? 編程

紅色的是業務代碼

將藍色的代碼抽取出來,??

連接點 原始方法

切入點 實際追加功能的方法

通知? 共性的功能

切面? 通知這個共性的功能與切入點之間的關系? ? ?(在哪個切入點上執行那些通知)

連接點是所有方法,切入點是匹配某些方法,有了切入點有了通知將他們一綁定叫做切面

切面描述的就是共性功能與執行位置之間的關系

入門案例

?

?

?AOP的工作流程

????????如果切入點和要造bean的那個類匹配上對應的方法,那么就造代理對象否則就是原始對象

? ? ? ? 工作本質:代理模式

?Aop切入點表達式

描述切入點方法的表達式

execution執行到指定的切入點?

?


?通知類型

前置通知? ? ? @Before

????????設置當前通知方法與切入點之間的綁定關系,當前通知方法在原始切入點方法前運行

后置通知? ? ? ? @After

????????設置當前通知方法與切入點之間的綁定關系,當前通知方法在原始切入點方法后運行

環繞通知

????????設置當前通知方法與切入點之間的綁定關系,當前通知方法在原始切入點方法前后運行

?????????通過proceedingjoinpoint來調用原始方法,如果沒有調用原始方法,就會對原始方法進行一個隔離的操作? ?比如說權限驗證的操作,如果 沒有權限,就不會調用原始方法,

返回后通知? @AfterReturning

????????設置當前通知方法與切入點之間的綁定關系,當前通知方法在原始切入點方法正常執行完畢后運行? ? ? (方法沒有拋出異常才能通知)

拋出異常后通知? ?@AfterThrowing

注意,這個僅僅是方法出異常之后才能執行,不出異常不執行.

案例:測量業務層接口萬次執行效率

?這樣就可以得到每個方法的執行時間,進行改良

主要是通過proceedingjoinpoint獲取到該方法的簽名信息,然后獲取到該方法的接口名,和方法名

就可以描述出來當前測得是誰

注意只是一個理論值

AOP通知獲取數據

獲取參數

獲取返回值

獲取異常信息

? ? ? ? 分析:是不是所有的通知都能拿到這三個,但是返回值和異常信息不一定

獲取參數? ?

????????可以解決的問題,比如說前端傳過來一個對象,但是我要的是字符串,那么aop獲取到參數,檢測到不是字符串,那么就傳遞一個默認的參數,這樣就保證了程序的健壯性.

返回值的獲取

? ? ? ? ? ? ?afertreturning? 和 around

????????案例百度網盤密碼數據兼容處理

????????通過proceedingjoinpoint的getAregs獲取到業務層代碼的參數,然后獲取到,密碼的String,然后通過trim去掉密碼的空格,然后返回到給業務層,然后繼續實現業務層代碼.?????????

如果有許多大量的重復的功能在項目中加載,那么aop是不二選擇,簡化共性開發

?Aop的總結

? ????????

?

其中環繞通知可以模擬出其他所有的通知

只在調用方法前做事情-------前置通知

用trycatch在finally里面寫的東西就是------后置通知

用trycach在try大括號結束之前原始方法調用之后的通知就是-------返回后通知

catch模擬--------拋出異常后通知

Spring的事務

? 解釋:可以在業務層開啟的事務

事務作用:在數據層保障一系列的數據庫操作同成功同失敗

Spring事務的作用:? ?在業務層開啟事務可以保證多個調用數據層的操作同成功或者失敗

如何保證 :平臺事務管理器接口? ?兩個方法? 回滾,提交

實現類使用jdbc的事務?

?

? 案例轉賬:? ? 轉賬整個事務中沒有原子性,要么這個轉賬的事務全做要么全不做

? ? ? ? ?第一步在要加事物的接口上加上@Transaction? 第二步設定平臺事務管理器然后在配置中加上事務管理器,config中加上事務管理器的bean? 創建事務的datasourceTransactionMananger事務管理器, 第三步? 在Spring的配置文件中加上EnableTransactionManageMenagement告訴Spring你加上了Transaction這個事務管理器

當加上了事務的注解的業務層代碼,出現了異常,要么都提交要么都不提交.

第一步

第二步?

第三部

?Spring事務角色

?

?將兩個事務都加到Spring事務中

事務管理員? ? 事務發起方,在Spring中通常指的是業務層開啟事物的方法

事務協調員? ?加入事務方? 在Spring中指的是數據層的方法,也可以是業務層方法

將多個事務打成一個事務

????????mybatis中的sqlSessionFactory中的Datasource和我們的jdbc中的事務管理器中的sqlsessionFactory的datasource是同一個,所以Spring的事務管理才能生效進行統一進行管理

進行相同的數據源進行管理.

事務的相關配置(可以在注解上進行配置)

案例

?

日志事務和兩個轉賬事務都繼承一個事務,但是我們想要的是日志的事務不要加入這個事務的集中,自己開啟一個全新事務?

事務的傳播行為? ?事務協調員對事務管理員的所攜帶事務的處理態度? ? (右邊對左邊)

讓事務的協調員有不同的事務特征

SpringMVC

簡介;? ? ? 是一種基于Java實現的mvc模型的輕量級的web框架

Springmvc進行表現層功能開發

?入門案例?

導入jar包

定義成bean?

?初始化配置類

?告訴tomcat容器加載配置

?流程分析

?

?

?Springboot

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/917827.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/917827.shtml
英文地址,請注明出處:http://en.pswp.cn/news/917827.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ESP32:2.搭建UDP服務器

硬件&#xff1a;ESP32-Devkit-V4 MODEL:ESP32-32U 庫&#xff1a;ESP-IDF v5.4.1 系統&#xff1a;windows中的虛擬機 ubuntu 22.04 實現STA&#xff0c;主動連接AP后&#xff0c;打印IP地址&#xff0c;獲取IP后&#xff0c;創建socket&#xff0c;搭建UDP 服務器&#xff0…

【Linux】動靜態庫制作

&#x1f43c;故事背景假設今天你有一位舍友。你需要幫助他完成老師的作業。而他寫的代碼依賴兩個文件&#xff08;mymath.h,mystdio.h&#xff09;。但是這兩個文件的功能他不會寫&#xff0c;他只會調用。他的調用代碼:#include"mystdio.h" #include"mymath.h…

使用Database Navigator插件進行連接sqlite報錯invalid or incomplete database

解決方案 &#xff0c;將這個db.sqlite3文件拷貝到盤的文件中 &#xff0c;修改文件夾名字&#xff0c;重新使用絕對路徑訪問 db.sqlite3&#xff0c;將路徑名字的中文去掉 &#xff0c;不能有中文

【Linux】重生之從零開始學習運維之主從MGR高可用

MGR集群部署12、15、18主機環境準備ssh免密碼登錄\rm -rf .ssh/* ssh-keygen ssh-copy-id 127.1 scp -r .ssh 10.0.0.12:/root/ ssh root10.0.0.12還原基礎環境systemctl stop mysqld \rm -rf /var/lib/mysql/* id mysqlvim /etc/my.cnf.d/mysql-server.cnf [mysqld] datadir/v…

如何在虛擬機(Linux)安裝Qt5.15.2

1.進入到阿里的網站下載在線安裝包 qt-official_releases-online_installers安裝包下載_開源鏡像站-阿里云 https://mirrors.aliyun.com/qt/official_releases/online_installers/?spma2c6h.13651104.d-5201.2.60ad4773ZZNPNm 2.下載完畢后&#xff0c;進入到下載地址&…

【運維進階】DHCP服務配置和DNS域名解析

DHCP服務配置和DNS域名解析 DHCP 服務介紹 在大型網絡中&#xff0c;系統靜態分配IP地址面臨問題&#xff1a; 確保不要同時在多個系統上使用同一個地址。部署新系統通常需要手動分配其IP地址。在云環境中&#xff0c;實例的網絡是自動化配置的。 動態主機配置協議&#xff08;…

VisionPro MR環境下虛擬物體與現實的透明度混合

display.rgb (virtualcontent.rgb*1)(passthrough.rgb*(1 - vistualcontent.a) viirtualcontent預乘過a值了&#xff0c;跟透明度混合公式一致 人頭檢測挖孔不清晰問題&#xff0c;這個a值變成設備層動態檢測人頭的a值&#xff0c;當面前的渲染壓力過大時&#xff0c;會導致…

css怪異模式(Quirks Mode)和標準模式(Standards Mode)最明顯的區別

文章目錄css怪異模式&#xff08;Quirks Mode&#xff09;和標準模式&#xff08;Standards Mode&#xff09;最明顯的區別詳細對比示例對比&#xff08;盒模型&#xff09;標準模式&#xff08;Standards Mode&#xff09;怪異模式&#xff08;Quirks Mode&#xff09;如何觸發…

一種簡單的3dnr去噪算法介紹

一段未經過插補的視頻圖像可以分解為若干幀&#xff0c;為了能正確地找到并去除圖像幀中的噪聲污染&#xff0c;由于視頻圖像各幀的連續性&#xff0c;在去噪的過程中就必須考慮幀圖像的空間性和時間性&#xff0c;一個簡單的例子&#xff0c;在去噪算法中就必須考慮&#xff0…

【數據結構初階】--排序(四):歸并排序

&#x1f525;個人主頁&#xff1a;草莓熊Lotso &#x1f3ac;作者簡介&#xff1a;C研發方向學習者 &#x1f4d6;個人專欄&#xff1a; 《C語言》 《數據結構與算法》《C語言刷題集》《Leetcode刷題指南》 ??人生格言&#xff1a;生活是默默的堅持&#xff0c;毅力是永久的…

GaussDB 并行創建索引

1 背景當業務數據在單表存儲達到一定的數量級時&#xff0c;此時對表創建索引是要花費時間的。GaussDB為了解決這個問題采用并行創建索引技術&#xff0c;以提高創建索引的效率。2 示例步驟1&#xff1a;根據實際情況調整maintenance_work_mem參數該大小。[Rubydtest1 ~]$ gsq…

LOOP Finance:一場 Web3 共和國中的金融制度實驗

LOOP Finance 是建構于幣安智能鏈&#xff08;BNB Chain&#xff09;上的定投型DEFI理財協議。 它以凱因斯經濟學為啟發&#xff0c;設計出一套長期、安全、穩定收益的全新DEFI玩法&#xff0c;兼顧穩健利息回報與DEFI高速成長的潛力。 通過生態機制&#xff0c;LOOP要求每位參…

【golang面試題】Golang遞歸函數完全指南:從入門到性能優化

引言&#xff1a;遞歸的本質與挑戰 在Golang中&#xff0c;遞歸函數是一把鋒利的雙刃劍。它通過函數自身調用實現問題分解&#xff0c;讓代碼變得簡潔優雅&#xff0c;但也容易因無限遞歸、棧溢出或性能問題讓開發者陷入困境。本文將從基礎到高級&#xff0c;全面解析Golang遞歸…

功能安全和網絡安全的綜合保障流程

摘要網絡物理系統是控制機械部件的計算機化系統。這些系統必須既功能安全又網絡安全。因此&#xff0c;已建立的功能安全與網絡安全標準需求創建網絡安全檔案&#xff08;ACs&#xff09;&#xff0c;以論證系統是功能安全與網絡安全的&#xff0c;即所有功能安全與網絡安全目標…

數據科學首戰:用機器學習預測世界杯冠軍

數據科學首戰&#xff1a;用機器學習預測世界杯冠軍Scikit-learn實戰&#xff1a;從數據清洗到冠軍預測的完整指南一、足球預測&#xff1a;數據科學的終極挑戰??世界杯數據價值??&#xff1a;歷史比賽數據&#xff1a;44,000場球隊特征指標&#xff1a;200球員數據點&…

一個php 連sqlserver 目標計算機積極拒絕,無法連接問題的解決

一個接口查詢數據耗時15秒&#xff0c;還沒數據&#xff0c;經查報錯日志&#xff1a;SQLSTATE[08001]: [Microsoft][ODBC Driver 17 for SQL Server]TCP 提供程序: 由于目標計算機積極拒絕&#xff0c;無法連接。 命令行執行&#xff1a;netstat -ano | findstr :1433發現結…

生成網站sitemap.xml地圖教程

要生成 sitemap.xml 文件&#xff0c;需要通過爬蟲程序抓取網站的所有有效鏈接。以下是完整的解決方案&#xff1a; 步驟 1&#xff1a;安裝必要的 Python 庫 ounter(line pip install requests beautifulsoup4 lxml 步驟 2&#xff1a;創建 Python 爬蟲腳本 (sitemap_genera…

idea拉取新項目第一次啟動報內存溢出(java.lang.OutOfMemoryError: Java heap space)

背景&#xff1a; 新拉取一個項目后&#xff0c;第一次啟動的時候報錯內存溢出&#xff1a; Java 堆內存溢出 (java.lang.OutOfMemoryError: Java heap space) 這個錯誤表示你的 Java 應用程序需要的內存超過了 JVM 堆內存的分配上限。 解決方案 1.增加堆內存大小 啟動應用時添…

安卓雷電模擬器安裝frida調試

1.在模擬器中設置調試root和adb 2.在vscode中安裝autox.js 3.在github上下載auto.js組件 新地址鏈接看來大佬的項目也經歷了波折https://blog.csdn.net/weixin_41961749/article/details/145669531 github地址https://github.com/aiselp/AutoX/releases 將下載的apk放入雷電…

Godot ------ 初級人物血條制作02

Godot ------ 初級人物血條制作02引言正文血條動態顯示引言 在 Godot ------ 初級人物血條制作01 一文中我們介紹了如何構建一個初級血條&#xff0c;但是我們并沒有涉及如何動態顯示血條。本文我們將介紹如何動態顯示血條。 正文 血條動態顯示 首先&#xff0c;我們為當前…