Dagger除了可以在属性上表示@Inject注入对象外,还可以在方法上标识,如下所示
然后调用DaggerMainActivityComponent.create().inject(this)就可以注入对象了
1 | public class MainActivity extends AppCompatActivity { |
Dagger帮我们生成了很多代码,我们可以看下注入的流程:
DaggerMainActivityComponent中inject()方法内部再调用injectMainActivity()方法
injectMainActivity()方法内部调用了MainActivity_MembersInjector.injectSetStudent()
1 |
|
我们再看下MainActivity_MembersInjector.injectSetStudent()方法内部,直接调用Activity中定义的setStudent方法注入student对象
1 | public static void injectSetStudent(MainActivity instance, Student student) { |
我们可以对比下以上injectSetStudent()方法和用@Inject标识成员变量时生成的injectSetStudent()的区别
一个是直接赋值,一个是调用set方法赋值,基本上大同小异
1 | public static void injectStudent(MainActivity instance, Student student) { |