Spring中核心概念詳解

BeanDefinition

Bean的定義是掰,在Spring中鹦倚,我們可以如何去定義一個Bean?

? ? 1、<bean/>

? ? 2冀惭、@Bean

? ? 3震叙、@Component(@Service,@Controller)

我們通過<bean/>,@Bean散休,@Component等方式所定義的Bean媒楼,最終都會被解析為BeanDefinition對象。BeanDefinition可以理解為底層源碼級別的一個概念戚丸,也可以理解為Spring提供的一種API使用的方式划址。


BeanDefinitionReader

BeanDefinitionReader分為幾類:

AnnotatedBeanDefinitionReader

可以直接把某個類轉(zhuǎn)換為BeanDefinition扔嵌,并且會解析該類上的注解

注意:它能解析的注解是:@Conditional,@Scope夺颤、@Lazy痢缎、@Primary、@DependsOn世澜、@Role独旷、@Description

XmlBeanDefinitionReader

可以解析<bean/>標簽


ClassPathBeanDefinitionScanner

這個并不是BeanDefinitionReader,但是它的作用和BeanDefinitionReader類似寥裂,它可以進行掃描嵌洼,掃描某個包路徑,對掃描到的類進行解析封恰,比如麻养,掃描到的類上如果存在@Component注解,那么就會把這個類解析為一個BeanDefinition


BeanFactory

Spring中比較核心的是BeanFactory的實現(xiàn)類是DefaultListableBeanFactory

它實現(xiàn)了很多接口诺舔,表示鳖昌,它擁有很多功能:

1、AliasRegistry:支持別名功能低飒,一個名字可以對應多個別名

2遗遵、BeanDefinitionRegistry:可以注冊、保存逸嘀、移除车要、獲取某個BeanDefinition

3、BeanFactory:Bean工廠崭倘,可以根據(jù)某個bean的名字翼岁、或類型、或別名獲取某個Bean對象

4司光、SingletonBeanRegistry:可以直接注冊琅坡、獲取某個單例Bean

5、SimpleAliasRegistry:它是一個類残家,實現(xiàn)了AliasRegistry接口中所定義的功能榆俺,支持別名功能

6、ListableBeanFactory:在BeanFactory的基礎上坞淮,增加了其他功能茴晋,可以獲取所有BeanDefinition的beanNames,可以根據(jù)某個類型獲取對應的beanNames回窘,可以根據(jù)某個類型獲取{類型:對應的Bean}的映射關系

7诺擅、HierarchicalBeanFactory:在BeanFactory的基礎上,添加了獲取父BeanFactory的功能

8啡直、DefaultSingletonBeanRegistry:它是一個類烁涌,實現(xiàn)了SingletonBeanRegistry接口苍碟,擁有了直接注冊、獲取某個單例Bean的功能

9撮执、ConfigurableBeanFactory:在HierarchicalBeanFactory和SingletonBeanRegistry的基礎上微峰,添加了設置父BeanFactory、類加載器(表示可以指定某個類加載器進行類的加載)抒钱、設置Spring EL表達式解析器(表示該BeanFactory可以解析EL表達式)蜓肆、設置類型轉(zhuǎn)化服務(表示該BeanFactory可以進行類型轉(zhuǎn)化)、可以添加BeanPostProcessor(表示該BeanFactory支持Bean的后置處理器)继效,可以合并BeanDefinition症杏,可以銷毀某個Bean等等功能

10装获、FactoryBeanRegistrySupport:支持了FactoryBean的功能

11瑞信、AutowireCapableBeanFactory:是直接繼承了BeanFactory,在BeanFactory的基礎上穴豫,支持在創(chuàng)建Bean的過程中能對Bean進行自動裝配

12凡简、AbstractBeanFactory:實現(xiàn)了ConfigurableBeanFactory接口,繼承了FactoryBeanRegistrySupport精肃,這個BeanFactory的功能已經(jīng)很全面了秤涩,但是不能自動裝配和獲取beanNames

13、ConfigurableListableBeanFactory:繼承了ListableBeanFactory司抱、AutowireCapableBeanFactory筐眷、ConfigurableBeanFactory

14、AbstractAutowireCapableBeanFactory:繼承了AbstractBeanFactory习柠,實現(xiàn)了AutowireCapableBeanFactory匀谣,擁有了自動裝配的功能

15、DefaultListableBeanFactory:繼承了AbstractAutowireCapableBeanFactory资溃,實現(xiàn)了ConfigurableListableBeanFactory接口和BeanDefinitionRegistry接口武翎,所以DefaultListableBeanFactory的功能很強大


ApplicationContext

首先ApplicationContext是個接口,可以把它理解為一個特殊的BeanFactory


1溶锭、HierarchicalBeanFactory:擁有獲取父BeanFactory的功能

2宝恶、ListableBeanFactory:擁有獲取beanNames的功能

3、ResourcePatternResolver:資源加載器趴捅,可以一次性獲取多個資源(文件資源等等)

4垫毙、EnvironmentCapable:可以獲取運行時環(huán)境(沒有設置運行時環(huán)境功能)

5、ApplicationEventPublisher:擁有廣播事件的功能(沒有添加事件監(jiān)聽器的功能)

6拱绑、MessageSource:擁有國際化功能

有兩個比較重要的實現(xiàn)類:

1露久、AnnotationConfigApplicationContext

2、ClassPathXmlApplicationContext

AnnotationConfigApplicationContext


1欺栗、ConfigurableApplicationContext:繼承了ApplicationContext接口毫痕,增加了征峦,添加事件監(jiān)聽器、添加BeanFactoryPostProcessor消请、設置Environment栏笆,獲取ConfigurableListableBeanFactory等功能

2、AbstractApplicationContext:實現(xiàn)了ConfigurableApplicationContext接口

3臊泰、GenericApplicationContext:繼承了AbstractApplicationContext蛉加,實現(xiàn)了BeanDefinitionRegistry接口,擁有了所有ApplicationContext的功能缸逃,并且可以注冊BeanDefinition针饥,注意這個類中有一個屬性(DefaultListableBeanFactory?beanFactory)

4、AnnotationConfigRegistry:可以單獨注冊某個為類為BeanDefinition(可以處理該類上的@Configuration注解需频,已經(jīng)可以處理@Bean注解)丁眼,同時可以掃描

5、AnnotationConfigApplicationContext:繼承了GenericApplicationContext昭殉,實現(xiàn)了AnnotationConfigRegistry接口苞七,擁有了以上所有的功能

ClassPathXmlApplicationContext



BeanPostProcessor

Bean的后置處理器,可以在創(chuàng)建每個Bean的過程中進行干涉挪丢,是屬于BeanFactory中一個屬性蹂风。


BeanFactoryPostProcessor

Bean工廠的后置處理器,是屬于ApplicationContext中的一個屬性乾蓬,是ApplicationContext在實例化一個BeanFactory后惠啄,可以利用BeanFactoryPostProcessor繼續(xù)處理BeanFactory。


FactoryBean

允許程序員自定義一個對象通過FactoryBean間接的放到Spring容器中成為一個Bean任内。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末撵渡,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子族奢,更是在濱河造成了極大的恐慌姥闭,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件越走,死亡現(xiàn)場離奇詭異棚品,居然都是意外死亡,警方通過查閱死者的電腦和手機廊敌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門铜跑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人骡澈,你說我怎么就攤上這事锅纺。” “怎么了肋殴?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵囤锉,是天一觀的道長坦弟。 經(jīng)常有香客問我,道長官地,這世上最難降的妖魔是什么酿傍? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮驱入,結果婚禮上赤炒,老公的妹妹穿的比我還像新娘。我一直安慰自己亏较,他們只是感情好莺褒,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著雪情,像睡著了一般遵岩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上旺罢,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天旷余,我揣著相機與錄音绢记,去河邊找鬼扁达。 笑死,一個胖子當著我的面吹牛蠢熄,可吹牛的內(nèi)容都是我干的跪解。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼签孔,長吁一口氣:“原來是場噩夢啊……” “哼叉讥!你這毒婦竟也來了?” 一聲冷哼從身側響起饥追,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤图仓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后但绕,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體救崔,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年捏顺,在試婚紗的時候發(fā)現(xiàn)自己被綠了六孵。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡幅骄,死狀恐怖劫窒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拆座,我是刑警寧澤主巍,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布冠息,位于F島的核電站,受9級特大地震影響孕索,放射性物質(zhì)發(fā)生泄漏铐达。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一檬果、第九天 我趴在偏房一處隱蔽的房頂上張望瓮孙。 院中可真熱鬧,春花似錦选脊、人聲如沸杭抠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽偏灿。三九已至,卻和暖如春钝的,著一層夾襖步出監(jiān)牢的瞬間翁垂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工硝桩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留沿猜,地道東北人。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓碗脊,卻偏偏與公主長得像啼肩,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子衙伶,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容