下面我們接著abstractbeanfactory的dogetbean中方法,如果未從快取中獲取到例項物件就會進入到下面方法
if (mbd.issingleton())我們重點看getsingleton方法catch (bean***ception ex)
});bean = getobjectforbeaninstance(sharedinstance, name, beanname, mbd);
}
public object getsingleton(string beanname, objectfactory<?> singletonfactory)我們重點看下面方法://再物件建立之前執行一些操作
beforesingletoncreation(beanname);
boolean newsingleton = false;
boolean recordsuppressedexceptions = (this.suppressedexceptions == null);
if (recordsuppressedexceptions)
try
catch (illegalstateexception ex)
}catch (beancreationexception ex)
}throw ex;
}finally
aftersingletoncreation(beanname);
}if (newsingleton)
}return singletonobject;
}}
beforesingletoncreation
protected void beforesingletoncreation(string beanname)這裡再次校驗是否存在重複建立和迴圈建立問題}
protected void addsingleton(string beanname, object singletonobject)然後進入到這個方法,這裡我們可以看到,他將物件放入到快取中並將其factorybean從工廠物件集合中刪掉}
並從早建立快取中移除掉,並新增到註冊中。下面還有最為重要的方法createbean這個方法是spring中最為核心的方法。
Spring 實踐 獲取bean
spring在初始化時容器會根據配置檔案初始化所有配置的bean。在使用時有兩種常用方法可以在 中獲取例項。系統會自己根據名稱 型別去容器裡查詢對應的類並且注入,前提適用的場景必須是被spring所掃瞄到的類,且被注入到容器裡。換句話說就是 1 被spring掃瞄到。2 類被註解標記。在專案中,會遇...
讓Bean獲取Spring容器
實現beanfactoryaware介面的bean,擁有訪問beanfactory容器的能力,實現beanfactoryaware介面的bean例項被容器建立後,它會擁有乙個引用,該引用指向建立它的beanfactory。beanfactoryaware介面只有乙個方法 setbeanfactory...
spring獲取bean的方式
import org.springframework.beans.bean ception import org.springframework.beans.factory.nosuchbeandefinitionexception import org.springframework.contex...