Spring中abstract true 的定義

2021-08-27 22:10:30 字數 1192 閱讀 2898

bean定義的繼承在bean定義中包含了大量的配置資訊,其中包括容器相關的資訊(比如初始化方法、靜態工廠方法名等等)以及構造器引數和屬性值。子bean定義就是從父bean定義繼承配置資料的bean定義。它可以覆蓋父bean的一些值,或者新增一些它需要的值。使用父/子bean定義的形式可以節省很多的輸入工作。實際上,這就是一種模板形式。

當以程式設計的方式使用beanfactory時,子bean定義用childbeandefinition類表示。大多數使用者從來不需要以這個方式使用它們,而是以類似xmlbeanfactory中的宣告方式去配置bean定義。當使用基於xml的配置元資料時,給'parent'屬性指定值,意味著子bean定義的宣告。

如果子bean定義沒有指定class屬性,它將使用父bean定義的class屬性,當然也可以覆蓋它。在後面一種情況中,子bean的class屬性值必須同父bean相容,也就是說它必須接受父bean的屬性值。

乙個子bean定義可以從父bean繼承構造器引數值、屬性值以及覆蓋父bean的方法,並且可以有選擇地增加新的值。如果指定了init-method,destroy-method和/或靜態factory-method,它們就會覆蓋父bean相應的設定。

剩餘的設定將總是從子bean定義處得到:依賴、自動裝配模式、依賴檢查、singleton、作用域和延遲初始化。

注意在上面的例子中,我們使用abstract屬性顯式地將父bean定義標記為抽象的。 下面是個父bean定義並沒有指定class屬性的例子,其中父bean必須顯式地標上abstract:

由於這樣的父bean是不完整的,而且還被顯式標記為抽象的,因而它無法得到自己的例項。抽象bean定義可作為子bean定義的模板。若要嘗試單獨使用這樣的父bean(比如將它作為其他bean的ref屬性而引用,或者直接使用這個父bean的id作為引數呼叫getbean()方法),將會導致錯誤。同樣地,容器內部的preinstantiatesingletons()方法會完全忽略abstract的bean定義。

注:由於設定bean定義中設定了abstract="true",因此它不能被容器例項化,只是在此起了模板的作用,供其他bean繼承,所以在它的屬性在類體中可以不定義,直接在bean的宣告中以宣告即可。子bean繼承他後需要在提供對應的屬性和set方法即可,在子bean中就可獲取從父bean繼承來的值

abstract類和abstract方法

可以使用abstract來修飾乙個類或者方法。用abstract修飾的類表示這個類是乙個抽象類,用abstract修飾的方法表示這個方法是乙個抽象方法。抽象類不能被例項化。抽象方法是只有方法宣告,而沒有方法的實現內容。可以使用abstract來修飾乙個類。用abstract修飾的類表示這個類是乙個抽...

abstract類和abstract方法

可以使用abstract來修飾乙個類或者方法。用abstract修飾的類表示這個類是乙個抽象類,用abstract修飾的方法表示這個方法是乙個抽象方法。抽象類不能被例項化。抽象方法是只有方法宣告,而沒有方法的實現內容。可以使用abstract來修飾乙個類。用abstract修飾的類表示這個類是乙個抽...

abstract類和abstract方法

可以使用abstract來修飾乙個類或者方法。用abstract修飾的類表示這個類是乙個抽象類,用abstract修飾的方法表示這個方法是乙個抽象方法。抽象類不能被例項化。抽象方法是只有方法宣告,而沒有方法的實現內容。abstract 抽象類 可以使用abstract來修飾乙個類。用abstract...