dagger2注意事項(xiàng)

一、注入方法不支持多態(tài)(必須指定具體的Activity)。

@Component(modules ={HttpModule.class, DatabaseModule.class})
public interface MyComponent {
/ /這里的參數(shù)是不能用多態(tài)
void injectMainActivity(MainActivity activity);
}

二、@Singleton 是dagger提供的作用于注解,一般在module里使用。并不是java中的單例對(duì)象,是指在同一個(gè)容器中的同一對(duì)象類,作用域跟裝載他的component生命周期一致。所以Activity無(wú)論實(shí)例化多少次,都是指向同一個(gè)地址。

public class SingletonActivity extends AppCompatActivity {

@Inject
StudentSingleton singleton1 ;

@Inject
StudentSingleton singleton2 ;

TextView tv;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);

    tv = findViewById(R.id.id_tv_content);

    //build之后 進(jìn)行對(duì)象注入
    DaggerStudentSingleComponent.builder().build().inject(this);
}

public void getStudentInfo(View v) {
    tv.setText(singleton1 + "\n" + singleton2);
}

}
可以看到結(jié)果兩個(gè)StudentSingleton對(duì)象指向的相同的地址,那么說(shuō)明它們是同一個(gè)對(duì)象。
但是在另外的Activity中,也生成一個(gè)StudentSingleton對(duì)象,輸出的地址跟上面的不同。
由此可見(jiàn),@Singleton注解并不是我們平常意義上的單例,只是在同一個(gè)容器中,指向同一個(gè)對(duì)象才可能被稱為單例。
如果想實(shí)現(xiàn)全局單例,那就在application創(chuàng)建dagger的component,然后Activity通過(guò)get拿到這個(gè)component對(duì)象。

常見(jiàn)面試題:@Singleton 如何實(shí)現(xiàn)單例?
原理:
1、Component 持有單例依賴實(shí)例。
2、同一 Component 多次注入返回相同對(duì)象。

三、 Dagger 2 在 Android 中的最佳實(shí)踐
配置:
Application 級(jí) Component 提供全局單例(如 Retrofit, Room)。
Activity 級(jí) Subcomponent 提供與界面相關(guān)的依賴(如 Presenter)。

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

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

  • Dagger2入門詳解 參考文章 Dagger官網(wǎng) Dagger Document API 從零開始的Androi...
    DakerYi閱讀 1,292評(píng)論 0 7
  • Dagger2入門詳解 @(Android) Dagger2入門詳解 參考文章 環(huán)境配置 入門實(shí)例 其他注解和情況...
    JFang閱讀 631評(píng)論 1 0
  • 本文是作者在學(xué)習(xí)Dagger2入門的一篇很好的文章,特此在此轉(zhuǎn)載,非原創(chuàng)Dagger官網(wǎng) Dagger Docum...
    高永峰閱讀 21,257評(píng)論 11 48
  • 一、什么是IOC注入? 二、Dagger2 的介紹 三、Dagger2 的基本使用 1、添加Dagger2的依賴 ...
    初夏的雪閱讀 654評(píng)論 0 0
  • Dagger2 入門 2016-12-21 更新:添加@Subcomponent注解以及Lazy與Provider...
    fxzou閱讀 28,779評(píng)論 77 331

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