spring框架包含很多內容,需要了解spinrg cloud就要看spring boot,而spring boot又要看spring core(spring framework)
的基本介紹。
花了兩天左右,斷斷續續看了spring core相關的教程,包括
初步了解spring以後,個人理解spring的功能就是做依賴注入(從我目前了解的spring core
的角度來說,spring boot
等還沒學習)。spring framework的各種功能,圍繞如何配置依賴注入展開。
bean是spring操作的基本單位,bean可以被注入依賴,也可以作為依賴被注入到其他的bean中。
那麼什麼是bean,任何class可以通過xml配置,或者註解annotation
的方式被識別為bean。
乙個類/物件,從bean的角度,他還有類的型別,bean的名字、別名等相關資訊,通過這些資訊,可以以各式各樣的手段,設定需要被注入的bean。
怎麼維護bean的資訊
通過xml檔案定義bean,以及bean中的屬性依賴的bean/或者字面值
通過@autowired等註解,標註乙個類的某個字段、或者建構函式需要自動注入依賴。
如何生成需要的bean
預設spring的容器在初始化時就會建立所有的bean,bean是單例模式的,除非特別的指明其他的scope
(如prototype)。
所以當其他地方需要某個bean時,初始化時建立的bean 就會被提供出來。
什麼是需要的地方?
首先spring的依賴注入,都是基於bean的基礎上進行的。
需要的地方可以是乙個bean的:
通過xml配置,或者@autowired/@inject等註解方式,標識這個地方的引數需要依賴注入
需要的地方所謂的合適的bean是什麼?
一般是通過名字注入。
比如乙個bean註冊時,名字叫capitala
的capital類,另乙個bean需要乙個名稱為capitala
的bean,就可以通過
@autowired
@qualifier("capitala")
private capital capital;
來配置注入。
當然可以有更簡單的方式,比如整個程式裡,只有乙個capital型別的bean,那麼省略bean的名字,spring也可以按型別定位到所需要的bean。
另外還可以通過欄位的名字來尋找,是第三優先順序的查詢。
維護生命週期
bean的生命週期,有初始化前,初始化中,初始化後,銷毀等。
bean的初始化中和銷毀前的這兩個情況,可以通過如下方式定義
bean的初始化前和初始化後可以通過beanpostprocessor
介面的各個實現類來註冊,spring會識別介面的實現,自動在每個(或者指定的)bean的兩個階段呼叫介面方法。
各種-aware介面
這時候通過實現各種-aware介面的方法,spring會在建立bean的初始化過程中,注入這個bean需要的容器相關的類。
除了spring自帶的,還有jsr-250\jsr-330等規範定義的註解。
首先註解也都是為了實現依賴注入相關功能的,不過比較一開始令我疑惑的是@component/@service/@repository/@controller。
這裡說的我覺得比較清楚,這些註解其實都是擴充套件的bean類,都能被元件掃瞄到,使用不同的註解,spring在處理過程中會稍有不同,比如repository會特殊處理其中丟擲的異常以匹配資料庫異常。
另外這些註解多用於語義表述,清楚的標明每個類的層次,相比而言@component沒有確切業務層次含義。
Spring框架學習(一)
一 spring 是乙個 ioc di 和 aop 容器框架 1 什麼是ioc di?控制反轉 inversion of control,縮寫為ioc 是物件導向程式設計中的一種設計原則,可以用來減低計算機 之間的耦合度。其中最常見的方式叫做依賴注入 dependency injection,簡稱d...
框架學習之Spring學習(一)
第一章 spring的jar包匯入 配置檔案和ioc基本用法 setter注入 將spring framework 4.2.5.release下libs資料夾貼到專案中,並引入jar包。在專案中建立和src平級的resource資料夾,建立spring ioc.xml配置檔案,匯入以下配置 建立be...
Spring框架學習
技術人員每到乙個階段就會遇到乙個天花板,這表明你在這個階段已經積累足夠,需要突破了,如果技術人員發現自己從來沒有天花板,這說明你從來不懂的去反思去沉澱,去優化你的知識儲備。因為不同階段的技術儲備,在眾多職業道路上,可能造就一種從基本研發人員到職業架構師的轉變的職業道路,這可以說是從技術演變上的職業發...