今天在閱讀spring原始碼的時候,發現在載入xml中的bean時,解析了很多標籤,其中有常用的如:scope、autowire、lazy-init、init-method、destroy-method等等。但還有很多很少用甚至沒用過的標籤,看來對這個經常使用的框架,還是知之甚少,本著探索的精神,決定將bean中所有相關標籤的作用做一次整理,以便完善自己的知識體系。
另外,說明一下,使用的spring原始碼版本為當前最新版本5.2.0.build-snapshot
,跟老版本中的相關**可能會有少數差異。
解析spring中bean的屬性標籤的原始碼位置位於類:beandefinitionparserdelegate
的parsebeandefinitionattributes
方法中,原始碼如下:
public abstractbeandefinition parsebeandefinitionattributes(element ele, string beanname,
@nullable beandefinition containingbean, abstractbeandefinition bd)
// 解析 scope 屬性
else if (ele.hasattribute(scope_attribute))
else if (containingbean != null)
// 解析 abstract 屬性
if (ele.hasattribute(abstract_attribute))
// 解析 lazy-init 屬性
string lazyinit = ele.getattribute(lazy_init_attribute);
if (isdefaultvalue(lazyinit))
bd.setlazyinit(true_value.equals(lazyinit));
// 解析 autowire 屬性
string autowire = ele.getattribute(autowire_attribute);
bd.setautowiremode(getautowiremode(autowire));
// 解析 depends-on 屬性
if (ele.hasattribute(depends_on_attribute))
// 解析 autowire-candidate 屬性
string autowirecandidate = ele.getattribute(autowire_candidate_attribute);
if (isdefaultvalue(autowirecandidate))
}else
// 解析 primary 屬性
if (ele.hasattribute(primary_attribute))
// 解析 init-method 屬性
if (ele.hasattribute(init_method_attribute))
else if (this.defaults.getinitmethod() != null)
// 解析 destroy-method 屬性
if (ele.hasattribute(destroy_method_attribute))
else if (this.defaults.getdestroymethod() != null)
// 解析 factory-method 屬性
if (ele.hasattribute(factory_method_attribute))
// 解析 factory-bean 屬性
if (ele.hasattribute(factory_bean_attribute))
return bd;
}
裡面可以看到對 bean 標籤中的很多屬性進行了解析,接下來的幾篇裡,就來看看每個屬性的作用。(第乙個已經廢棄的屬性就不說了 Spring原始碼解讀之bean注入依賴
在應用開發中 以應用開發人員的身份訪問設計元件時候,往往需要引用 或者呼叫其他組建的服務,這種依賴關係如果固定在元件設計中就會造成 依賴關係的僵化和維護難度的增加。在 spring 中通過ioc 容器把資源的獲取方 向反轉,讓 ioc容器住的管理這些依賴關係,將這些關係注入到元件中,那麼會讓這些依賴...
關於spring原始碼解讀
spring源 解析 一 ioc容器 spring源 解析 二 ioc容器在web容器中的啟動 spring源 解析 三 spring jdbc spring源 解析 四 spring mvc spring源 解析 五 spring aop獲取proxy spring源 解析 六 spring宣告式...
spring原始碼之bean包
測試 如下 建立乙個teacher類 public class teacher public void setdescription string description 在包下建立乙個spring.xml 在 測試 suppresswarnings deprecation public class...