Spring系列之FactoryBean 二

2021-09-20 18:11:36 字數 2516 閱讀 8268

public t getbean(string name, classrequiredtype, object... args) throws bean***ception 

protected t dogetbean(

final string name, final classrequiredtype, final object args, boolean typecheckonly)

throws bean***ception

getsingleton從spring容器中獲取單例bean

protected object getsingleton(string beanname, boolean allowearlyreference) }}

}return (singletonobject != null_object ? singletonobject : null);

}

getobjectforbeaninstance的分析

protected object getobjectforbeaninstance(

object beaninstance, string name, string beanname, rootbeandefinition mbd)

//不是factorybean型別 或者name以&開頭 直接返回bean例項

//想一下我們關於factorybean的知識:如果要根據beanname獲取真正的factorybean例項的時候

//需要在beanname前面加上& 這裡就可以看到為什麼要這樣做了。

if (!(beaninstance instanceof factorybean) || beanfactoryutils.isfactorydereference(name))

object object = null;

if (mbd == null)

//如果沒有

if (object == null)

boolean synthetic = (mbd != null && mbd.issynthetic());

//從這個方法的名字我們可以看到這個方法的意思是:從factorybean中

//獲取物件

//getobjectfromfactorybean的分析在下面

object = getobjectfromfactorybean(factory, beanname, !synthetic);

}return object;

}

getobjectfromfactorybean的分析

protected object getobjectfromfactorybean(factorybean> factory, string beanname, boolean shouldpostprocess) 

else

//丟擲異常

}//放入到factorybeanobjectcache中快取起來 key為beanname

this.factorybeanobjectcache.put(beanname, (object != null ? object : null_object));}}

return (object != null_object ? object : null);}}

else

catch (throwable ex)

}return object;}}

dogetobjectfromfactorybean的分析

private object dogetobjectfromfactorybean(final factorybean> factory, final string beanname)

throws beancreationexception

}, acc);

}catch (privilegedactionexception pae)

}else

}if (object == null && issingletoncurrentlyincreation(beanname))

return object;

}

整個流程圖大致如下:

流程簡化起來就是:

迴圈spring容器中所有的beannames,再根據beanname獲取對應的bean例項,判斷獲取的bean例項是不是factorybean型別的bean,如果是,則呼叫bean的getobjecttype方法獲取class,將獲取到的class和傳入的class進行匹配,如果匹配到,則將此beanname和傳入的class建立乙個對映關係。再根據beanname獲取到spring容器中對應的bean,呼叫bean的getobject方法來獲取對應的例項。

期末系列之spring

spring 分層架構的七個模組 spring core 核心容器 提供spring框架基本功能,定義了建立 配置 管理bean的方式 spring context 上下文 向spring框架提供上下文資訊 spring aop 整合面向切面程式設計,為基於spring的應用程式物件提供事務管理服務...

spring系列之 切點 切面

乙個類 show 裡面有乙個表演 display 的方法,在表演之前,應該有致辭 say 的方法,在表演之後,應該有鼓掌 hand 的方法。為了高內聚低耦合,表演的方法應該單獨封裝在乙個類裡面,致辭和鼓掌的方法應該另外封裝,但在呼叫時必須按照順序來呼叫執行。這時候就需要設定切面和切點了!切面應該設定...

Spring系列學習之Spring Batch

英文原文 目錄概述 特性spring boot配置 快速開始 學習 文件 指南 示例輕量級,全面的批處理框架,旨在開發對企業系統日常運營至關重要的強大批處理應用程式。spring batch提供了可重複使用的功能,這些功能對於處理大量記錄至關重要,包括記錄 跟蹤,事務管理,作業處理統計,作業重啟,跳...