spring

bean

   @Component 是一種通用的注解,可以讓spring容器自動(dòng)注冊(cè)
   @Repository, @Service, and @Controller 是更特殊化的 @Component 注解
   如@Repository  支持事務(wù)異常處理
   @RestController annotation from Spring MVC is composed of @Controller and 
   @ResponseBody.

    @Resource  -    根據(jù)字段name來(lái)注入
    @SpringBootTest     用junit-test 啟動(dòng)springBoot

初始化和銷毀

實(shí)現(xiàn)InitializingBean  慰安,中重寫afterPropertiesSet()  該bean對(duì)象會(huì)在初始化的時(shí)候被調(diào)用,   
DisposableBean 在對(duì)象被銷毀的時(shí)候 回調(diào) destroy()  方法.



preInstantiateSingletons()       會(huì)初始化所有的bean對(duì)象    從
Class-      DefaultListableBeanFactory         -            beanDefinitionNames 中拿到定義

beanUtil-instantiateClass


初始化bean 依賴    AbstractAutowireCapableBeanFactory-populateBean

refreshContext(context)-    invokeBeanFactoryPostProcessors(beanFactory);    初始

化 registerBeanDefinition  


isCandidateComponent  通過(guò)有沒(méi)有注解來(lái)判斷  是否加入candidate


    //spring 注入依賴
    ReflectionUtils.makeAccessible(field);
                field.set(bean, value);



大致描述一下 beanDefinition -

目前簡(jiǎn)單得講最原始得一種 解析DefaultListableBeanFactory->beanDefinition
在refreshContext(context)- invokeBeanFactoryPostProcessors(beanFactory) 來(lái)填充beanDefinitionMap
通過(guò)springBoot得啟動(dòng)類 如SpringApplication.run(DemoSourceApplication.class, args);
拿到DemoSourceApplication.class, 得basepath. 通過(guò)JAVA Recoure 類 資源來(lái)解析下面所有得jar class文件莹桅, 裝載進(jìn)入一個(gè)集合, 在通過(guò)循環(huán)這個(gè)集合 解析是否 是否有注解 是否滿足isCandidateComponent 烛亦,滿足就加入 ,目前位置就會(huì)有所有需要初始化類得bean-definition

大致得初始化流程-

入口-

// Instantiate all remaining (non-lazy-init) singletons.
finishBeanFactoryInitialization(beanFactory);

this.beanDefinitionNames 拿到所有得bean定義
通過(guò)AbstractBeanFactory->getbean 去實(shí)例化生成bean對(duì)象

這里實(shí)例化bean對(duì)象是通過(guò)原始java.lang 反射包去生成對(duì)象诈泼,
同時(shí)最重要的一點(diǎn)也是
如果對(duì)象中存在依賴,也是spring對(duì)象,

class A{
@Autoware
   B  b;
 }

 class B{
  @AutoWare
    C c;
}

class C{}

這時(shí)候spring得初始化順序是 先初始化A 此洲, 在初始化 B 在初始化C
遞歸裝載厂汗, 然后把C賦值給B 委粉, 在把B賦值給A
通過(guò)


ReflectionUtils.makeAccessible(field);
                field.set(bean, value);

初始化所有的 web-path

在requestMappingHandlerMapping 這個(gè)對(duì)象實(shí)例化的時(shí)候調(diào)用initializeBean-> invokeInitMethods ->.afterPropertiesSet()

初始化時(shí)關(guān)鍵一步 -

   // Create bean instance.
               if (mbd.isSingleton()) {
                   sharedInstance = getSingleton(beanName, () -> {
                       try {
                           return createBean(beanName, mbd, args);
                       }
                       catch (BeansException ex) {
                           // Explicitly remove instance from singleton cache: It might have been put there
                           // eagerly by the creation process, to allow for circular reference resolution.
                           // Also remove any beans that received a temporary reference to the bean.
                           destroySingleton(beanName);
                           throw ex;
                       }
                   });
                   bean = getObjectForBeanInstance(sharedInstance, name, beanName, mbd);
               }


在getObjectForBeanInstance  方法中如果這個(gè)初始化對(duì)象實(shí)現(xiàn)了FactoryBean
那么這個(gè)實(shí)列  會(huì)調(diào)用sharedInstance 中g(shù)etObject () 方法 返回正在的實(shí)例
   
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末呜师,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子贾节,更是在濱河造成了極大的恐慌汁汗,老刑警劉巖衷畦,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異知牌,居然都是意外死亡祈争,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門角寸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)菩混,“玉大人,你說(shuō)我怎么就攤上這事扁藕【谙浚” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵亿柑,是天一觀的道長(zhǎng)邢疙。 經(jīng)常有香客問(wèn)我,道長(zhǎng)望薄,這世上最難降的妖魔是什么疟游? 我笑而不...
    開(kāi)封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮痕支,結(jié)果婚禮上颁虐,老公的妹妹穿的比我還像新娘。我一直安慰自己采转,他們只是感情好聪廉,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著故慈,像睡著了一般板熊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上察绷,一...
    開(kāi)封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天干签,我揣著相機(jī)與錄音,去河邊找鬼拆撼。 笑死容劳,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的闸度。 我是一名探鬼主播竭贩,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼莺禁!你這毒婦竟也來(lái)了留量?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎楼熄,沒(méi)想到半個(gè)月后忆绰,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡可岂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年错敢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缕粹。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡稚茅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出平斩,到底是詐尸還是另有隱情峰锁,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布双戳,位于F島的核電站虹蒋,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏飒货。R本人自食惡果不足惜魄衅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望塘辅。 院中可真熱鬧晃虫,春花似錦、人聲如沸扣墩。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)呻惕。三九已至荆责,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間亚脆,已是汗流浹背做院。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留濒持,地道東北人键耕。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像柑营,于是被迫代替她去往敵國(guó)和親屈雄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

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