国产探花免费观看_亚洲丰满少妇自慰呻吟_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的用法


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黄龙县| 黔东| 嵊泗县| 西畴县| 开封市| 镇远县| 新和县| 徐州市| 中宁县| 灵寿县| 南岸区| 惠安县| 竹溪县| 昌吉市| 广饶县| 玉门市| 湘西| 安达市| 东方市| 巴林右旗| 永定县| 临邑县| 蛟河市| 体育| 静宁县| 同心县| 从化市| 涿鹿县| 孟津县| 得荣县| 七台河市| 连云港市| 渭南市| 开江县| 富川| 荥阳市| 白山市| 澄城县| 临城县| 壤塘县| 隆昌县|