Dagger2初級使用

作者本人寫這文章,純屬扯淡,以及方便日后觀看.請看官莫扔磚....

1.Dagger2是社么

簡單說: 以注入的方式方便開發(fā)的一個框架(這也太簡單了)

2.怎么用
第一步
創(chuàng)建XXXComponent接口,XXX代表具體注入功能的功能類型,比如UserComponent

 @Singleton
 @Component(modules = {MainModule.class})
  public interface UserComponent {
          void inject(MainActivity activity);
  }
  //其中@Singleton表示單例模式
  //@Component的作用是告訴dagger匹配實體類或者功能類的構(gòu)造函數(shù),這個一定是一個接口.
  //(modules = {MainModule.class})代表按照一定規(guī)則進行匹配,為了適應(yīng)有多個構(gòu)造函數(shù)的類.
  //void inject(MainActivity activity)表示要注入的位置,類型就是注入的位置.

第二步
配置MainModule.class(就是上面寫在@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來區(qū)分的,Dagger有多種區(qū)分方式,還包括數(shù)字區(qū)分,但是原都記本一致.

第三步
生成處理類,dagger會根據(jù)第一步和第二步的配置來生成操作類,但是我們需要先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;
        }
    }
}

我們這里只是寫了個點擊事件來觸發(fā)測試,所以不要在意那些細節(jié)

經(jīng)過第一、二、三步之后,我們還需要在Oncreat中初始化一下操作類就可以使用了,這個操作類是自動生成的,而且在工程目錄中是查詢不到的,但是可以直接使用.
方法如下

DaggerUserComponent.builder().build().inject(this);

名字實際上就是"DaggerXXXCompoment"......
接下來就是

@Named("AA")
@Inject
User user1;

接下來這一段了, 已經(jīng)可以直接使用了~~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容