@Module: Modules are classes whose methods provide dependencies,so we
define a class and annotate it with @Module,thus,Dagger will know
where to find the dependencies in order to satisfy them when
constructing class instances. One important feature of modules is that
they have been designed to be partitioned and composed together (for
instance we will see that in our apps we can have multiple composed
modules).
@Component: Components basically are injectors,let’s say a bridge between
@Inject and @Module,which its main responsibility is to put
both together. They just give you instances of all the types you
defined,for example,we must annotate an interface with @Component
and list all the @Modules that will compose that component,and if any
of them is missing,we get errors at compile time. All the components
are aware of the scope of dependencies it provides through its
modules.
@Provide: Inside modules we define methods containing this annotation
which tells Dagger how we want to construct and provide those
mentioned dependencies.
我想这将有助于理解.