深入理解Spring(IOC)(二)

回顧:
上一篇講道springIOC 與DI自動裝配的一些方法
1、spring實現IOC的思路和方法
2、@Autowired與@Resource:的區別對比
3、Singleton Beans with Prototype-bean Dependencies引發的一些問題見 上一篇博客
接上篇:

1、spring聲明週期和回調

參考文檔:
https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-lifecycle
spring生命週期回調的方式有一下三種
1、Methods annotated with @PostConstruct
2、afterPropertiesSet() as defined by the InitializingBean callback interface
3、A custom configured init() method
**
爲什麼要了解生命週期和回調?
1、我們要徹底搞懂spring 整個運行的過程。所以我們要了解spring運行的軌跡。
2、我們的目標是深入搞懂spring原理!後面源碼會重點介紹這裏

測試

1、Methods annotated with @PostConstruct
如下圖,官網中也有講道。XML與註解方式實現,spring生命週期的初始化,與銷燬!
在這裏插入圖片描述
在這裏插入圖片描述
2、afterPropertiesSet() as defined by the InitializingBean callback interface
1、spring初始化實現InitializingBean接口重寫afterPropertiesSet完成初始化。可以發現構造方法執行完成後再執行初始化方法,
應用場景 :某些場景,組件的加載可以重寫初始化方法在裏面做一些組件加載
2、銷燬方法,spring容器銷燬時候執行實現DisposableBean接口 重寫destroy() 方法!
在這裏插入圖片描述
3、A custom configured init() method
自定義一個方法完成XML配置,官網有介紹。。
在這裏插入圖片描述
總結: 本人覺得註解的方式最優雅,實現接口。代碼API侵入性太強,XML方式太過繁瑣。

2、掃描排除

如下圖,正常包掃描,會掃描出自定義下包下的所有類。有些工具類如果我們不想要它掃描到怎麼辦呢?
在這裏插入圖片描述
(方法一)如下圖:(排除某一個類)
在這裏插入圖片描述
方法二 排除整個包
眼尖的小哥哥 已經發現,排除某一個類。一旦沒找到,則會報錯,不初始化任何類。而排除整個包。會初始化其他包下的類信息。(面試的時候小心被挖坑
在這裏插入圖片描述

spring IOC部分總結:

看到這裏,大家應該搞懂了什麼是IOC,思考一下 其他框架怎麼跟spring整合?
spring 依賴注入,與自動裝配。只能自己玩?那不是很low?作者初心抱着徹底搞懂SpringIOC的心態
如下圖,spring java Configuration方式整合mybatis
參考文檔:
1、mybatis官網
2、mybatis整合spring中文官網
A:通過mybatis官網可以發現,要使用mybatis先要實例化SqlSessionFactory,spring初衷new的這個動作交給spring去管理。而且 SqlSessionFactory是一個接口不能實例化。那怎麼辦呢?於是mybatis官方整合了一個mybatis-spring的jar包
在這裏插入圖片描述
如圖所示:mybatis整合spring, 實例化SqlSessionFactoryBean SqlSessionFactoryBean實現了SqlSessionFactory傳入DataSource對象則實現了,spring與mybatis的整合。完成了框架整合,並且mybatis交給了spring管理。完成了springIOC功能!
在這裏插入圖片描述在這裏插入圖片描述

3、spring循環引用問題

原因分析: 如圖IndexService 引用TestService ,TestService引用IndexService 。是否會報錯?
在這裏插入圖片描述在這裏插入圖片描述
解答: 這種依賴是不會報錯。
原因分析:大致分爲如下三個步驟。後面spring源碼分析時,會講道這裏
在這裏插入圖片描述
3、(面試問題)什麼時候會產生循環依賴的問題?
當兩個類爲 原型@Scope(“prototype”)時候,由於原型時,沒有緩存區。。見上圖。假設IndexService初始化。需要依賴TestService。這個時候spring去getBean由於TestService還沒有初始化。就會報錯。。因爲沒有緩存區。TestService還沒有沒初始化()
在這裏插入圖片描述
**

4、(面試題@Profile有什麼作用?)@Profile註解用法,與多配置類演示

如圖所示:Spring2配置類,掃描com.bing.dao 而spring配置類掃描com.bing.service
在這裏插入圖片描述
在這裏插入圖片描述
如圖所示:啓用profiles2文件,則會報錯!!因爲Spring2不掃描service下的文件。利用@Profile我們就可以靈活切換數據源,與配置。多生產環境。可以靈活部署。
在這裏插入圖片描述
在這裏插入圖片描述
**
SpringIOC部分內容就整理到這裏。相信讀者認真學習已經有所收穫吧!接下來。會整理,AOP與spring源碼部分。。** 持續關注。學習也好,複習也好,不迷路**

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章