學(xué)習(xí)視頻:【孫哥說Spring5:從設(shè)計(jì)模式到基本應(yīng)用到應(yīng)用級(jí)底層分析,一次深入淺出的Spring全探索。學(xué)不會(huì)Spring?只因你未遇見孫哥】
第七章、反轉(zhuǎn)控制與依賴注入
1.反轉(zhuǎn)(轉(zhuǎn)移)控制(IOC inverse of Control)
-
控制:對(duì)于成員變量賦值的控制權(quán)
-
反轉(zhuǎn)控制:把對(duì)于成員變量賦值的控制權(quán),從代碼中反轉(zhuǎn)(轉(zhuǎn)移)到Spring工廠和配置文件中。
好處:解耦合
-
底層實(shí)現(xiàn):工廠設(shè)計(jì)模式
如果對(duì)工廠設(shè)計(jì)模式不熟悉,可以看看前面的從簡(jiǎn)單工廠到通用工廠的筆記:Spring5的基本介紹、工廠設(shè)計(jì)模式
2.依賴注入(Dependency Injection Di)
-
注入:通過Spring的工廠及配置文件,為對(duì)象(bean、組件)的成員變量賦值
-
依賴注入:當(dāng)一個(gè)類需要另一個(gè)類時(shí),就意味著依賴,一旦出現(xiàn)依賴,就可以把另一個(gè)類作為本類的成員變量,最終通過Spring配置文件進(jìn)行注入(賦值)
好處:解耦和
第八章、Spring工廠創(chuàng)建復(fù)雜對(duì)象
1.什么是復(fù)雜對(duì)象
- 復(fù)雜對(duì)象:指的就是不能直接通過new構(gòu)造方法創(chuàng)建的對(duì)象(Connection,SqlSessionFactory)
2.Spring工廠創(chuàng)建復(fù)雜對(duì)象的3種方式
2.1 FactoryBean接口
FactoryBean是Spring原生提供給我們創(chuàng)建復(fù)雜對(duì)象的方式,同時(shí)也是spring中一個(gè)非常重要的機(jī)制
-
開發(fā)步驟
- 實(shí)現(xiàn)FactoryBean接口
-
Spring配置文件的配置
如果Class中指定的類型 是FactoryBean接口的實(shí)現(xiàn)類,那么通過id獲取的是這個(gè)類所創(chuàng)建的復(fù)雜對(duì)象。
class雖然指向ConnectionFactoryBean,但是ctx.getBean("conn")獲取的是Connection復(fù)雜對(duì)象。
<bean id=”conn” class=”com.baizhi.factorybean.ConnectionFactoryBean”/>
-
細(xì)節(jié)
-
如果只想獲得FactoryBean類型的對(duì)象
ConnectionFactoryBean conn = (ConnectionFactoryBean) ctx.getBean("&conn");
getBean的參數(shù)加上“&” -
isSingleton方法
返回true只會(huì)創(chuàng)建一個(gè)復(fù)雜對(duì)象
返回false每一次都會(huì)創(chuàng)建新的對(duì)象
問題:怎么選擇? 根據(jù)這個(gè)對(duì)象的特點(diǎn),決定是返回true還是false
-
mysql高版本連接創(chuàng)建時(shí),需要指定ssl證書,在連接數(shù)據(jù)庫的url參數(shù)加上 useSSL=false即可解決。
-
依賴注入的體會(huì)
-
把Connection Factory Bean中依賴的4個(gè)字符串信息,進(jìn)行配置文件的注入
好處:解耦合
<bean id="conn" class="com.baizhi.factorybean.ConnectionFactoryBean"> <property name="driveClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/myschool?useSSL=false"/> <property name="username" value="root"/> <property name="password" value="123456"/> </bean>
-
-
-
FactoryBean的實(shí)現(xiàn)原理(簡(jiǎn)易版)
- 接口回調(diào)
- 為什么Spring規(guī)定FactoryBean接口 實(shí)現(xiàn) 并且 getObject()?
- ctx.getBean(”conn”)獲得是復(fù)雜對(duì)象 Connection,而沒有獲得ConnectionFactoryBean(&)
Spring內(nèi)部運(yùn)行流程
- 通過conn獲取ConnectionFactoryBean類的對(duì)象,進(jìn)而通過instanceof判斷是FactoryBean接口的實(shí)現(xiàn)類
- Spring按照規(guī)定執(zhí)行 getObject() ——>Connection
- 返回Connection
-
FactoryBean總結(jié)
Spring中用于創(chuàng)建復(fù)雜對(duì)象的一種方式,也是Spring原生提供的,后續(xù)講解Spring整合其他框架,會(huì)大量應(yīng)用FactoryBean。
2.2 實(shí)例工廠
-
避免Spring框架的侵入
implements FactoryBean(是spring提供的,離開了FactoryBean,沒有能代替)
-
整合遺留系統(tǒng)(去到公司后,往往是整合遺留下來的代碼)
- 開發(fā)步驟
<!-- 2.獲取復(fù)雜對(duì)象 通過實(shí)例工廠-->
<bean id="connFactory" class="com.baizhi.factorybean.ConnectionFactory"/>
<bean id="conn" factory-bean="connFactory" factory-method="getConnection"/>
2.3 靜態(tài)工廠
- 開發(fā)步驟
<!--3. 獲取復(fù)雜對(duì)象 通過靜態(tài)工廠-->
<bean id="conn" class="xxx.StaticConnectionFactory" factory-method="getConnection"/>
3.Spring工廠創(chuàng)建對(duì)象的總結(jié)
文章來源:http://www.zghlxwxcb.cn/news/detail-746375.html
第九章、控制Spring工廠創(chuàng)建對(duì)象的次數(shù)
1.如何控制簡(jiǎn)單對(duì)象的創(chuàng)建次數(shù)
<bean id="account" scope="singleton | prototype" class="com.baizhi.scope.Account"></bean>
singleton:只會(huì)創(chuàng)建一次簡(jiǎn)單對(duì)象 默認(rèn)值
prototype:每一次都會(huì)創(chuàng)建新的對(duì)象
2.如何控制復(fù)雜對(duì)象的創(chuàng)建次數(shù)
FactoryBean{
isSingleton(){
return true 只會(huì)創(chuàng)建一次
return false 每一次創(chuàng)建新的
}
}
如沒有isSingleton方法 還是通過scope控制次數(shù)
3.為什么要控制對(duì)象的創(chuàng)建次數(shù)?
- 好處:節(jié)省不必要的內(nèi)存浪費(fèi)(對(duì)象創(chuàng)建多次,內(nèi)存會(huì)浪費(fèi)掉)
- 什么樣的對(duì)象只創(chuàng)建一次
- SqlSessionFactory
- DAO
- Service
- 什么樣的對(duì)象每次都要?jiǎng)?chuàng)建新的
- Connection
- SqlSession | Session
下一章:Spring5學(xué)習(xí)隨筆-生命周期、自定義類型轉(zhuǎn)換器、后置處理Bean文章來源地址http://www.zghlxwxcb.cn/news/detail-746375.html
到了這里,關(guān)于Spring5學(xué)習(xí)隨筆-IOC(反轉(zhuǎn)控制)、DI(依賴注入)和創(chuàng)建復(fù)雜對(duì)象的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!