前幾日出去面試,被問及dagger2箫章,一無所知±雍桑現(xiàn)在ioc框架很火,后端的Spring檬寂,到前端的Dagger2终抽。都是同一種思想,到處應用⊥爸粒現(xiàn)在開始學習昼伴,并且記錄一些使用技巧。實現(xiàn)原理暫且不談塞茅,熟能生巧嘛亩码,先用上了再說。
1.報錯
錯誤: izhonghong.com.dagger2.bean.Student cannot be provided without an @Inject constructor or from an @Provides- or @Produces-annotated method.
izhonghong.com.dagger2.bean.Student is injected at
izhonghong.com.dagger2.SecondActivity.student
izhonghong.com.dagger2.SecondActivity is injected at
izhonghong.com.dagger2.inject.compontent.SecondCompontent.inject(secondActivity)
顯示SecondComponent注入失敗野瘦,指向SecondModule 看SecondModule的代碼
@PerActivity
@Named("12345")
public Student getStudent3(){
Student student =new Student();
student.setName("小黃");
return student;
}
這里提供了Student數(shù)據(jù) 并且有@Named 標簽 而MainModule 中也有提供Student實例的方法描沟,并且也標注了@Named
@Provides
@Named("1234")
@PerActivity
public? Student getStudent2(){
Student s =new Student();
s.setName("小藍");
return? s;
}
去掉@Named標簽后build成功飒泻。
總結:
1.當Module中只有一個同類實例方法的時候,不能添加@Name()
2.在一個Module中實例方法調用了@Name標簽后吏廉,不能在其他module中實例化該對象