<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ## 4.7 Bean 定義的繼承 bean 的定義可以包含很多配置信息包括構造方法參數,屬性值和容器指定的信息,比 如初始化方法,靜態工廠方法名稱等。子 bean 定義繼承從父 bean 中獲得的配置元數據。 子 bean 可以覆蓋一些值或者添加其它所需要的。使用父子 bean 定義可以節省很多輸入。 實際上,這是一種模板形式。 如 果 你 編 程 式 地 使 用 ApplicationContext 接口,子 bean 的 定 義 可 以 由 ChildBeanDefinition 類代 表。 很多 用戶 不使 用這 個級 別的 方法 ,而 是在 類似于 ClassPathXmlApplicationContext.中聲明式地配置 bean 的信息。當使用基于 XML 的配置元數據時,你可以使用 parent 屬性來標識一個子 bean,使用這個屬性的值來標識 父 bean。 ``` <bean id="inheritedTestBean" abstract="true" class="org.springframework.beans.TestBean"> <property name="name" value="parent"/> <property name="age" value="1"/> </bean> <bean id="inheritsWithDifferentClass" class="org.springframework.beans.DerivedTestBean" parent="inheritedTestBean" init-method="initialize"> <property name="name" value="override"/> <!-- age屬性值1將會從父bean中繼承過來 --> </bean> ``` 如果沒有指定一個子 bean 使用父 bean 的類,但也可以覆蓋它。在這種情形中,子 bean的類必須和父 bean 兼容,也就是說,它必須接受父 bean 的屬性值。 子 bean 的定義繼承構造方法參數值,屬性值,還有父 bean 的方法覆蓋,添加新值的 選擇。任何你指定的初始化方法,銷毀方法,和/或 static 工廠方法設置會覆蓋對應父 bean 中的設置。 剩下的設置通常是從子 bean 來定義:依賴,自動裝配模式,依賴檢測,單例,范圍, 延遲初始化。 前面的示例明確地使用了 abstract 屬性來標識了父 bean 的定義。如果父 bean 沒有 指定類,那么明確地標識父 bean 就必須要有 abstract,如下所示: ``` <bean id="inheritedTestBeanWithoutClass" abstract="true"> <property name="name" value="parent"/> <property name="age" value="1"/> </bean> <bean id="inheritsWithClass" class="org.springframework.beans.DerivedTestBean" parent="inheritedTestBeanWithoutClass" init-method="initialize"> <property name="name" value="override"/> <!-- age屬性值1將會從父bean中繼承過來 --> </bean> ``` 父 bean 不會被實例化,因為它自己是不完整的,而且也明確地被 abstract 標記。當 bean 的定義是 abstract 這樣的,那么它也僅僅被用做純 bean 定義的模板,作為子 bean 定義的父 bean。嘗試使用這種自身是 abstract 的父 bean,作為另外一個 bean 參考的屬 性來指代它,或者使用父 bean 的 id 來明確使用 getBean()方法調用,會返回錯誤。相似 地,容器內部的 preInstantiateSingletons()方法忽略了抽象 bean 的定義。 > ![](https://box.kancloud.cn/2016-01-25_56a58526bb420.gif) > 注意 > 默認情況下,預實例化所有單例 bean。因此,如果你有僅僅想用作模板的(父)bean, 而且這個 bean 指定了一個類,那么必須將 abstract 屬性設置為 true,這點是很重要的。否 則,應用上下文就會(嘗試)預實例化 abstract 的 bean。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看