Android Dagger2 自定义@Qualifier

先定义两个Qualifier,待会在Module中用于区分两个Person

@Qualifier
@Retention(RetentionPolicy.RUNTIME)
public @interface QualifierStudent {}

@Qualifier
@Retention(RetentionPolicy.RUNTIME)
public @interface QualifierTeacher {}
public interface Person {
    String saySomething();
}

public class Student implements Person {

    public String name;

    public Student() {
        this.name = "野猿新一";
    }

    @Override
    public String saySomething() {
        return String.format("我的名字叫%s啦", name);
    }
}

public class Teacher implements Person {

    public String name;

    public Teacher() {
        this.name = "苍老湿";
    }

    @Override
    public String saySomething() {
        return String.format("我的名字叫%s啦", name);
    }
}

 这里是重点,用上面定义的两个Qualifier @QualifierStudent和@QualifierTeacher来区分两个放回类型都为Person的方法

@Module
public class MainModule {

    @Provides
    @QualifierStudent
    public Person provideStudent() {
        return new Student();
    }

    @Provides
    @QualifierTeacher
    public Person provideTeacher() {
        return new Teacher();
    }
}
@Component(modules = MainModule.class)
public interface MainActivityComponent {
    void inject(MainActivity activity);
}

 这里是另一个重点,被注入的变量也要用Qualifier标注,表示要用那个方法来生成对象

public class MainActivity extends AppCompatActivity {

    @Inject
    @QualifierTeacher
    Person person;

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

        DaggerMainActivityComponent.create().inject(this);
        TextView textView = findViewById(R.id.text);
        textView.setText(person.saySomething());
    }
}

 

posted @ 2019-06-16 13:17  野猿新一  阅读(31)  评论(0)    收藏  举报