把它看作是一个像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