Spring原始碼解讀 bean標籤中的屬性

2022-02-09 04:33:04 字數 1991 閱讀 9944

今天在閱讀spring原始碼的時候,發現在載入xml中的bean時,解析了很多標籤,其中有常用的如:scope、autowire、lazy-init、init-method、destroy-method等等。但還有很多很少用甚至沒用過的標籤,看來對這個經常使用的框架,還是知之甚少,本著探索的精神,決定將bean中所有相關標籤的作用做一次整理,以便完善自己的知識體系。

另外,說明一下,使用的spring原始碼版本為當前最新版本5.2.0.build-snapshot,跟老版本中的相關**可能會有少數差異。

解析spring中bean的屬性標籤的原始碼位置位於類:beandefinitionparserdelegateparsebeandefinitionattributes方法中,原始碼如下:

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...