在一般情况下使用 @Inject 和 @Component 就能实现注入
但是在以父类为抽象类引用指向子类的时候,只用 @Inject 编译会报错
这时候需要用到 @Module 和 @Provides 注解了
1、与之前一样导依赖 jar 包。
2、创建 xxx 实体类名 + Module 的 Module 类
Module 中
- @Modulepublic class PersonModule {@Provides public Person providePerson() {
- return new Student();
- }
- }
Component 中 (需要指定 modules)
- @Component(modules = PersonModule.class) public interface MainActivityComponent {
- void inject(MainActivity activity);
- }
3、在多个 Provides 的情况下 (要用到 @Qualifier 来限定)
-@Qualifier 用来定义注解
- @Qualifier@Retention(RetentionPolicy.RUNTIME) public@interface ParentPerson {}
- 该注解用于区别不同的 Provides (即抽象父类的不同子类)
- @Modulepublic class PersonModule {@Provides@StudentPerson①public Person providePerson() {
- return new Student();
- }@Provides@ParentPerson①public Person provideParent() {
- return new Parent();
- }
- }
- 需要以该抽象类对象为传入对象的构造方法的 类的注入
- @Modulepublic class ClassesModule {@Provides public ClassMates provideClassesMate(@StudentPerson②Person person) {
- return new ClassMates(person);
- }
- }
- 最后 Component 中还要另外添加一个 ClassesModule.class
- @Component(modules = {
- PersonModule.class,
- ClassesModule.class
- }) public interface MainActivityComponent {
- void inject(MainActivity activity);
- }
备注:
1、@Inject 注解有三个作用:写在实体类的构造方法上 用于 指定改方法可用于得到该对象;写在需要被注入类的成员变量上 用于 将对象注入该成员变量;写在需要被注入类的方法上,如 setXXX() 方法等,这样的方法一般在构造方法执行后执行。
就爱阅读 www.92to.com 网友整理上传, 为您提供最全的知识大全, 期待您的分享,转载请注明出处。
来源: http://www.92to.com/bangong/2016/12-05/13909382.html