Согласно документации :
Component Dependencyдает вам доступ только к привязкам, предоставляемым в качестве методов предоставления через зависимости компонентов, т.е. у вас есть доступ только к тем типам, которые объявлены в parent Component.
SubComponentдает вам доступ ко всему графу связывания от его родителя, когда он объявлен, т.е. у вас есть доступ ко всем объектам, объявленным в его Modules.
Скажем, у вас есть , ApplicationComponentсодержащее все Androidродственное вещество ( LocationService, Resources, SharedPreferenceи т.д.). Вы также хотите, чтобы DataComponentвы постоянно управляли вещами, а также имели WebServiceдело с API. Единственное, чего тебе не хватаетDataComponent это Application Contextчто находится в ApplicationComponent. Самый простой способ получить Contextот DataComponent- это зависимость ApplicationComponent. Вы должны быть уверены, что у вас есть Contextявное объявление, ApplicationComponentпотому что у вас есть доступ только к объявленным вещам. В этом случае нет ручной работы, то есть вам не нужно указывать Submodulesв parent Componentи явно добавлять свой подмодуль в родительский модуль, например:
MySubcomponent mySubcomponent = myComponent.plus(new ChildGraphModule("child!")); // No need!
Теперь рассмотрим тот случай, когда вы хотите ввести WebServiceиз DataComponentи LocationServiceиз ApplicationComponentв ваш, Fragmentкоторый связывает с помощью@Submodule plus функции выше. Крутая вещь здесь заключается в том, что компонент, к которому вы привязываете ( ApplicationComponent), не нужно раскрывать WebServiceни LocationServiceпотому, что у вас есть доступ ко всему графику сразу.