title: Can someone provide a good explanation of Dagger 2?
body: <p>I'm really having a hard time understanding the Dagger 2 Dependency injection system.</p>
  
  <p>I understand the use of the <code>@Inject</code> annotation to tell Dagger we need to provide an instance of some type to here.</p>
  
  <p>But, I don't understand the various roles of the other components such as: <code>@Module</code> , <code>@Component</code> , <code>@Provides</code> and how they work together to provide the appropriate instance to the appropriate dependency.</p>
  
  <p>Can someone please explain it simply and concisely ?</p>