2015-10-01 33 views

回答

3

這在文檔中以及基礎課程中都有介紹。

在ATG中,您定義了「組件」。這些是命名爲給定類的實例。

您可以使用.properties文件來定義這些組件。屬性文件的路徑和名稱(相對於配置根)成爲組件的名稱。

.properties文件包含類的名稱被實例化

該文件還定義了實例的範圍內,即,是否,一旦實例化,對象應該只存在當前請求,當前會話,或應用程序的持續時間(全局)

此外,您可以爲組件定義任何屬性值。這些可以通過值(特別是對於基本數據類型)或通過引用另一個組件,按名稱。

當您啓動一個ATG EAR的實例時,它是啓動的Nucleus。 Nucleus是一個bean容器,負責其中定義的組件的生命週期。

Nucleus在第一次訪問組件時實例化組件。實例化的過程如下(大大簡化)

  • 的核將通過調用類的無參數構造創建對象的實例。
  • 該組件將被命名爲.properties文件位置,並保存在指定的範圍內。
  • 然後Nucleus將通過.properties文件中定義的所有屬性並調用對象的setXXX(...)方法來設置值。
  • 對於按值的對象(由屬性文件中的值定義),該屬性將被直接設置。
  • 對於引用對象(由屬性文件中的Nucleus組件的名稱定義),將在適當的作用域中查找引用的組件,如果存在,則將在該屬性上進行設置。如果引用的組件尚未實例化,那麼核會饞該組件第一(以下爲部分相同的過程),然後設置對象將會對房地產

設定最後一步是如何ATG做依賴注入。

總之,這是什麼意思是,如果你的類A對B類的一個實例上的依賴,那麼作爲一個開發者,你不寫代碼實例B類,或查找並綁定到一個B類的實例。只要你滿足基本要求[1],你就爲A類編寫代碼,並隱含假設你總會得到一個B類的值。然後將B類的一個實例配置爲一個組件,A類的一個實例作爲一個組件,並且你將A類的屬性引用到B類的實例,並且Nucleus將確保當A類中的代碼執行時,它已經被注入了一個有效的B類實例。

[1] A類和B類必須有無參數的構造函數,A類必須有一個可寫的函數B型手術(例如它必須有一個public void setB(B myB)方法)

+0

謝謝你的簡單解釋。 –

+0

沒問題,@SanchitaDharmadhikary。我確信我在初始培訓課程中認爲你這麼做:) – Vihung

2

Foo.java

package my.foopackage; 
import my.custompackageCustomClass.CustomClass; 

public class Foo { 

    private CustomClass customClass; 

    public void setCustomClass (CustomClass customClass){ 
     this.customClass = customClass; 
    } 

    public CustomClass getCustomClass() { 
     return customClass; 
    } 
} 

CustomClass.java

package my.custompackageCustomClass; 

public class CustomClass { 
    private String myProperty; 

    public void setMyProperty (CustomClass myProperty){ 
     this.myProperty = myProperty; 
    } 

    public CustomClass getMyProperty() { 
     return myProperty; 
    } 
} 

Foo.properties

$class=my.foopackage.Foo 
$scope=global 

customClass=/path/to/configuration/file/ofYourWantedCustomClass/CustomClass 

CustomClass.properties

$class=my.custompackageCustomClass.CustomClass 
$scope=global 

myProperty=myProperty1 

請注意,您可以爲您的組件使用多個屬性文件。 例如:CustomClass1.properties,CustomClass2.properties等,您可以爲String myProperty設置不同的值。 它幫助我認爲它像第二層多態(在實例級別),但主要區別在於所有組件都可以通過/ dyn/admin和分層配置進行配置。