作者本人寫(xiě)這文章,純屬扯淡,以及方便日后觀看.請(qǐng)看官莫扔磚....
1.Dagger2是社么
簡(jiǎn)單說(shuō): 以注入的方式方便開(kāi)發(fā)的一個(gè)框架(這也太簡(jiǎn)單了)
2.怎么用
第一步
創(chuàng)建XXXComponent接口,XXX代表具體注入功能的功能類(lèi)型,比如UserComponent
@Singleton
@Component(modules = {MainModule.class})
public interface UserComponent {
void inject(MainActivity activity);
}
//其中@Singleton表示單例模式
//@Component的作用是告訴dagger匹配實(shí)體類(lèi)或者功能類(lèi)的構(gòu)造函數(shù),這個(gè)一定是一個(gè)接口.
//(modules = {MainModule.class})代表按照一定規(guī)則進(jìn)行匹配,為了適應(yīng)有多個(gè)構(gòu)造函數(shù)的類(lèi).
//void inject(MainActivity activity)表示要注入的位置,類(lèi)型就是注入的位置.
第二步
配置MainModule.class(就是上面寫(xiě)在@component后面的那一坨)
@Module
public class MainModule {
@Named("AA")
@Provides
@Singleton
User provideUser() {
return new User("test");
}
@Named("BB")
@Provides
@Singleton
User providerUserNothing(){
return new User();
}
}
這里我是按照named來(lái)區(qū)分的,Dagger有多種區(qū)分方式,還包括數(shù)字區(qū)分,但是原都記本一致.
第三步
生成處理類(lèi),dagger會(huì)根據(jù)第一步和第二步的配置來(lái)生成操作類(lèi),但是我們需要先make module一下才可以哦,
在Android studio中 build ->make module app
第四步
使用注解,并且初始化注入,使用
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button btn_main;
@Named("AA")
@Inject
User user1;
@Named("BB")
@Inject
User user;
@Inject
Debugger mDebugger;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DaggerUserComponent.builder().build().inject(this);
btn_main = findViewById(R.id.btn_main);
btn_main.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn_main:
Log.e("ddd", user1.getName());
Log.e("ddd", user.getName());
break;
}
}
}
我們這里只是寫(xiě)了個(gè)點(diǎn)擊事件來(lái)觸發(fā)測(cè)試,所以不要在意那些細(xì)節(jié)
經(jīng)過(guò)第一胁孙、二廊驼、三步之后,我們還需要在Oncreat中初始化一下操作類(lèi)就可以使用了,這個(gè)操作類(lèi)是自動(dòng)生成的,而且在工程目錄中是查詢(xún)不到的,但是可以直接使用.
方法如下
DaggerUserComponent.builder().build().inject(this);
名字實(shí)際上就是"DaggerXXXCompoment"......
接下來(lái)就是
@Named("AA")
@Inject
User user1;
接下來(lái)這一段了, 已經(jīng)可以直接使用了~~~