程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> Spring基礎——在 IOC 容器中 Bean 之間的關系,iocbean

Spring基礎——在 IOC 容器中 Bean 之間的關系,iocbean

編輯:JAVA綜合教程

Spring基礎——在 IOC 容器中 Bean 之間的關系,iocbean


一、在 Spring IOC 容器中 Bean 之間存在繼承和依賴關系。

需要注意的是,這個繼承和依賴指的是 bean 的配置之間的關系,而不是指實際意義上類與類之間的繼承與依賴,它們不是一個概念。

二、Bean 之間的繼承關系。

1.被繼承的 ban 稱為父 bean,繼承這個父 bean 的 bean 稱為子 bean。父 bean 可以通過指定 abstract 屬性來聲明為抽象的,子 bean 通過指定 parent 屬性來指定父 bean 的引用。

2.子 bean 從父 bean 中繼承配置,包括 bean 的屬性配置,同時也可以覆蓋從父 bean 繼承過來的配置。如:

<bean class="com.nucsoft.spring.bean.Employee" id="employee" p:empName="emp01" p:age="23"/> 
<bean class="com.nucsoft.spring.bean.Employee" id="employee2" p:empName="emp02" parent="employee"/>

其中 employee2 繼承了 employee,繼承了 employee 的 age 屬性,覆蓋了 empName 屬性。

3.若想父 bean 只是作為一個模板,可以設置 <bean> 的 abstract 屬性為 true,IOC 容器將不會實例化這個 bean。若直接獲得,則會報一個 BeanIsAbstractException 的異常。

4.並不是父 bean 的所有屬性都會被繼承,像 abstract 和 autowire 這樣的屬性就不會被繼承。

5.也可以忽略父 bean 的 class 屬性,讓子 bean 指定自己的類,而共享相同的屬性配置。如:

<bean class="com.nucsoft.spring.bean.Employee" id="employee" p:empName="emp01" p:age="23"/>
<bean class="com.nucsoft.spring.bean.Employee2" id="employee22" p:address="123mutouren" parent="employee"/>

三、Bean 之間的依賴關系

1.通過 <bean> 的屬性 depends-on 屬性來指定該 Bean 的前置依賴。所謂的前置依賴是指:在 IOC 在初始化時刻,實例化配置文件中的 bean 時,前置依賴的 bean 要在該 bean 實例化之前實例化。

2.例子:

/**
 * @author solverpeng
 * @create 2016-07-18-15:07
 */
public class First {
    public First() {
        System.out.println("我被實例化了! 我是 First");
    }
}
/**
 * @author solverpeng
 * @create 2016-07-18-15:08
 */
public class Second {
    public Second() {
        System.out.println("我被實例化了! 我是 Second");
    }
}

e1:在沒有添加 depends-on 屬性前。

<bean class="com.nucsoft.spring.bean.First" id="first"/>
<bean class="com.nucsoft.spring.bean.Second" id="second"/>

控制台輸出:

我被實例化了! 我是 Second
我被實例化了! 我是 First

<bean class="com.nucsoft.spring.bean.Second" id="second"/>
<bean class="com.nucsoft.spring.bean.First" id="first"/>

控制台輸出:

我被實例化了! 我是 Second
我被實例化了! 我是 First

結論:由上述可以看出,在不指定 depends-on 的前提下,IOC 容器默認實例化的順序是按照 bean 在配置文件中的順序來實例化的。

e2:添加 depends-on 屬性

<bean class="com.nucsoft.spring.bean.First" id="first" depends-on="second"/>
<bean class="com.nucsoft.spring.bean.Second" id="second"/>

控制台輸出:

我被實例化了! 我是 Second
我被實例化了! 我是 First

3.如果前置依賴於多個 Bean,則可以通過逗號或空格的方式指定多個依賴。並且是按照先後順序進行實例化。如:

<bean class="com.nucsoft.spring.bean.First" id="first" depends-on="third second"/>
<bean class="com.nucsoft.spring.bean.Second" id="second"/>
<bean class="com.nucsoft.spring.bean.Third" id="third"/>

控制台輸出:

我被實例化了! 我是 Third
我被實例化了! 我是 Second
我被實例化了! 我是 First

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved