一.Dagger2介紹
Dagger2 是一款 Java 平臺的依賴注入庫。
依賴注入相關概念:
依賴(Dependency):如果在 Class A 中,有個屬性是 Class B 的實例,則稱 Class B 是 Class A 的依賴,本文中我們將 Class A 稱爲宿主(Host),並且全文用 Host 表示;Class B 稱爲依賴(Dependency),並且全文用 Dependency 表示。一個 Host 可能是另外一個類的 Dependency。
宿主(Host):如果 Class B 是 Class A 的 Dependency,則稱 Class A 是 Class B 的宿主(Host)。
依賴注入:如果 Class B 是 Class A 的 Dependency,B 的賦值不是寫死在了類或構造函數中,而是通過構造函數或其他函數的參數傳入,這種賦值方式我們稱之爲依賴注入。
二.Dagger2使用
project的build.gradle添加
dependencies {
... // 其他classpath
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}
app的build.gradle添加
apply plugin: 'com.neenbedankt.android-apt'//添加apt命令
dependencies {
apt 'com.google.dagger:dagger-compiler:2.0.2' //指定註解處理器
compile 'com.google.dagger:dagger:2.0.2' //dagger公用api
provided 'org.glassfish:javax.annotation:10.0-b28' //添加android缺失的部分javax註解
}
PersonModel是一些基本消息
public class PersonModel {
private String id;
private String name;
public PersonModel(String id, String name) {
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Module是一個依賴的製造工廠
@Module
public class ActivityModule {
@Provides
public PersonModel providePersonModel() {
return new PersonModel("1", "zjx");
}
}
Component就是一個將Module生成的實例注入Container中的注入器
@Component(modules = ActivityModule.class)
public interface ActivityComponent {
void inject(MainActivity mainActivity);
}
public class MainActivity extends AppCompatActivity {
private ActivityComponent mActivityComponent;
@Inject
PersonModel personModel; //不能爲private
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mActivityComponent = DaggerActivityComponent.builder().
activityModule(new ActivityModule()).build();
mActivityComponent.inject(this);
((TextView) findViewById(R.id.textView)).
setText("ID:" + personModel.getId() + " Name: " + personModel.getName() );
}
}
Container中@Inject標記需要被注入的對象,mActivityComponent.inject(this)表示將調用Component的實現類將Module的生成的對象注入到personModel中,到此講解了dagger2的簡單使用。