Dagger2是Dagger的升級版,是一個依賴注入框架(依賴注入是什麼,自行百度)
如何使用呢?
1.導入
//一定要添加dagger2的annotationProcessor!
annotationProcessor 'com.google.dagger:dagger-compiler:2.11'
compile 'com.google.dagger:dagger-android:2.11'
// if you use the support libraries
compile 'com.google.dagger:dagger-android-support:2.11'
annotationProcessor 'com.google.dagger:dagger-android-processor:2.11'
2.實現
先記住這個注解
@Module
:作爲實例對象的容器。@Provides
:標註能夠提供實例化對象的方法。@Component
:作爲橋樑,注入對象的通道。@Inject
:需要注入的方法
不知道什麼意思,沒有關係,繼續看。
dagger將程序分爲三部分:
- 實例化部分:對象的實例化。類似於容器,將類的實例放在容器裏。
- 調用者:需要實例化對象的類。
- 溝通橋樑:利用Dagger2
中的一些API 將兩者聯繫
(1)實例化部分
@Module //提供依賴對象的實例
public class MainModule {
@Provides
// 關鍵字,標明該方法提供依賴對象
XX providerXX(){
//提供XX對象
return new XX();
}
}
(2) 溝通橋樑
@Component(modules = MainModule.class) // 作爲橋樑,溝通調用者和依賴對象庫
public interface MainComponent {
//定義注入的方法
void inject(MainActivity activity);
}
(3)調用者
public class MainActivity extends AppCompatActivity {
@Inject //標明需要注入的對象
XX xx;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 構造橋樑對象
MainComponent component = DaggerMainComponent.builder().build();
//注入
component.inject(this);
}
}
XX 是創建的實體類;
DaggerMainComponent 是根據 MainComponent 自動生成的調用類;
3.調用流程
- 創建
Component
(橋樑),並調用注入方法。 - 查找當前類中帶有
@Inject
的成員變量。 - 根據成員變量的類型從
Module
中查找哪個有@Provides
註解的方法返回值爲當前類型。
到此結束。。在實現過程中,發現2.11以外的版本無法編譯,不知道什麼原因,如果有知道的大牛請@,謝謝