把它看作是一個像java SubComponent extends ParentComponent
這樣的子組件,其中一切都是protected
。它可以訪問與父母相同的成員,並可以使用所有父母的東西。
另一方面,組件依賴關係就像一個委託對象,您只能訪問該類公開的方法。
讓我們假設我們有2個匕首可以創建和提供的類。無論這可能是什麼。無論使用構造函數注入還是從模塊創建對象都沒關係......我們假設我們有一些可以由BaseComponent
提供的2個類,我將在下面展示它們。
// some module can create either object
class ComponentPrivateObject {}
class ExposedObject {}
它們來自何處並不重要。下一部分是有趣的一點。我們聲明這些類中的一個作爲組件接口上方法的返回類型。這就是匕首所稱的配置方法。它說這個組件可以提供這個類。
@Component(modules=/* some modules */)
class BaseComponent {
// BaseComponent can provide ExposedObject!
ExposedObject exposedObject();
}
子和相關組件之間的不同之處在於,與年初Java示例,Subcomponent
將有機會獲得這兩個ComponentPrivateObject
和ExposedObject
,因爲它只是延伸父母圖表。
// can use either class, it just adds to the parent
@Subcomponent
class Subcomponent {}
在另一方面,DependentComponent
只能訪問ExposedObject
。它沒有擴展BaseComponent
的圖形,但它只是將BaseComponent
綁定爲某些對象的提供者。類似與Java樣品上方,它就像使用它的公共API,如果您嘗試使用ComponentPrivateObject
匕首會告訴你,它不能提供...
// binds component dependency as provider
@Component(dependency=BaseComponent.class)
class DependentComponent{}
一個擴展了父母,另一種使用其公共API。
請不要把它想象成一個子組件,比如java SubComponent extends ParentComponent。組件和子組件之間沒有繼承關係。相反,將它們看作內部類(它們以這種方式實現),因爲您可以訪問封閉組件中的所有內容。 – gk5885