国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Dagger2學習筆記之Qualifier

2019-11-09 14:44:59
字體:
來源:轉載
供稿:網友

dagger2在使用中,會出現兩個方法返回對象相同時的情況,那么如何區分呢。

由Dagger2學習筆記之dependencies更改的demo

public class PResent {    String ss = "呵呵噠";    public Present(Context context) {    }    public Present(String name) {        this.ss = name;    }}

@Modulepublic class AppModule {    Context mContext;    public AppModule(Context context) {        this.mContext = context;    }    @Provides    public Context provicesContext(){        return mContext;    }    @Provides    public String provicesString(){        return "盲僧";    }}

@Component(modules = {AppModule.class})public interface AppComponent {    //暴露一個接口    Context proContext();    //暴露一個接口    String proString();}

@Modulepublic class ActivityModule {    @Named("context")    @Provides    Present providesPresent(Context context){        return new Present(context);    }    @Named("string")    @Provides    Present providesPresentName(String name){        return new Present("女警");    }}

@Component(dependencies = {AppComponent.class},modules = {ActivityModule.class})public interface ActivityComponent {    void injectActivity(Main3Activity activity);}

public class Main3Activity extends AppCompatActivity {    @Named("context")    @Inject    Present mPresent;    @Named("string")    @Inject    Present mPresent2;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main3);        AppComponent appComponent = DaggerAppComponent.builder().appModule(new AppModule(this)).build();        ActivityComponent activityComponent = DaggerActivityComponent.builder()                .appComponent(appComponent)                .activityModule(new ActivityModule())                .build();        activityComponent.injectActivity(this);        Log.e("",mPresent.ss+"    "+mPresent2.ss);    }}打印結果為:呵呵噠    女警

注意點:

1:Main3Activity中的屬性必須用@Named("xxx")進行標注

2:ActivityModule中也需要@Named("xxx")進行標注

可以看出來,我們在用@Named時,很容易把括號里面的內容填寫錯誤,這時Qualifiler(限定符,自定義標記)的作用

創建兩個注解

@Qualifier@Retention(RetentionPolicy.RUNTIME)  // 運行時仍可用public @interface PresentForContext {}

@Qualifier@Retention(RetentionPolicy.RUNTIME)  // 運行時仍可用public @interface PresentForName {}

再把上面demo中的@Named("xx")替換掉就行

@Modulepublic class ActivityModule {    @PresentForContext    @Provides    Present providesPresent(Context context){        return new Present(context);    }    @PresentForName    @Provides    Present providesPresentName(String name){        return new Present(name);    }}

public class Main3Activity extends AppCompatActivity {    @PresentForContext    @Inject    Present mPresent;    @PresentForName    @Inject    Present mPresent2;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main3);        AppComponent appComponent = DaggerAppComponent.builder().appModule(new AppModule(this)).build();        ActivityComponent activityComponent = DaggerActivityComponent.builder()                .appComponent(appComponent)                .activityModule(new ActivityModule())                .build();        activityComponent.injectActivity(this);        Log.e("",mPresent.ss+"    "+mPresent2.ss);    }}

這就是Qualifiter的用法


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 砀山县| 建平县| 淳化县| 桂东县| 枞阳县| 天峻县| 大港区| 广宁县| 金平| 池州市| 香格里拉县| 浪卡子县| 兴宁市| 闽清县| 清水河县| 都昌县| 额济纳旗| 阜城县| 甘泉县| 青州市| 海城市| 昌宁县| 凤阳县| 彰化县| 民权县| 伽师县| 武汉市| 德保县| 亚东县| 迁西县| 调兵山市| 苏尼特左旗| 安义县| 石首市| 新绛县| 岳普湖县| 孝感市| 梅河口市| 惠东县| 临邑县| 赫章县|