Основное отличие в том, что Dagger 2 генерирует код на этапе компиляции, а Dagger 1 полагался на рефлексию в runtime.
Преимущества Dagger 2 перед Dagger 1:
В Dagger 1 использовались @Module и @Inject аннотации, а также классы @ObjectGraph для управления зависимостями.
В Dagger 2 также используются @Module и @Inject, но основной механизм — это @Component, который является фабрикой для инжектируемых объектов и генерируется Dagger'ом.
Пример модуля в Dagger 1:
java
Пример модуля в Dagger 2:
java
Пример компонента в Dagger 2:
java
Основной принцип Dagger 2: вы описываете граф зависимостей с помощью модулей и аннотаций, а Dagger генерирует классы, которые реализуют этот граф, предоставляя возможность получить экземпляры зависимостей. Это напоминает ручное написание фабрик, but automatically and efficiently.