【附】相关架构及资料
源码、笔记、视频。高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter全方面的Android进阶实践技术,和技术大牛一起讨论交流解决问题。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
super.onCreate();
// 为了实现局部共享一个实例,
// 我们需要在Application里,首先得到knifeComponent的实例
// 由于Application的onCreate方法,在应用程序里面,只运行一次
// 所以只得到了一个knifeComponent
// (后面我们通过getKnifeComponent来得到这唯一的一个getKnifeComponent)
// ok,我们之后会通过这个唯一的KnifeComponent来得到他所连接的KnifeModule
// 所提供的Knife的实例,再把这个实例注入到苹果、梨里面去,从而实现了苹果、梨
// 会共享这个实例。
// 而香蕉里的Knife,我们要重新建立一个Module和Component来获取Knife的新实例
// 这样就实现了Knife的实例,在苹果、梨之间局部共享,而香蕉使用的是另外一个实例
knifeComponent = DaggerKnifeComponent
.builder()
.knifeMofule(new KnifeMofule())
.build();
}
public static KnifeComponent getKnifeComponent() {
return knifeComponent;
}
}
```
-
把Knife注入到苹果、梨里面
public class Apple { @Inject Knife knife; public Apple() { MyApp.getKnifeComponent().inject(this); Log.e("knife", "苹果里的knife内存地址:" + knife.toString()); }
public class Pear { @Inject Knife knife; public Pear(){ Log.e("TAG", "我是一个梨"); MyApp.getKnifeComponent().inject(this); Log.e("knife", "梨里的knife内存地址:"+knife.toString()); } }
-
测试:内存地址是一样的,证明使用的是同一个实例。
E/knife: 苹果里的knife内存地址:com.demo.dagger2demo2.Knife@16e3e55f E/knife: 梨里的knife内存地址:com.demo.dagger2demo2.Knife@16e3e55f
如何让香蕉用另一把刀呢,很简单煎饼果子来一套即可(在写一套Module和Component)
-
Module
@Module public class KnifeForBananaModule { @Provides public Knife provideKnife(){ Knife knife = new Knife(); return knife; } }
-
Component
@Component(modules = KnifeForBananaModule.class) public interface KnifeForBananaComponent { void inject(Banana banana); }
-
注入到香蕉里
public class Banana { @Inject Knife knife; public Banana() { KnifeForBananaComponent knifeForBananaComponent = DaggerKnifeForBananaComponent.builder().knifeForBananaModule(new KnifeForBananaModule()).build(); knifeForBananaComponent.inject(this); Log.e("knife", "kinfe在香蕉中的内存地址:" + knife.toString()); } }
-
测试:苹果和梨使用了同一个Knife的实例,而香蕉使用了另一把Knife的实例,实现了局部共享实例啦
E/knife: 苹果里的knife内存地址:com.demo.dagger2demo2.Knife@336e5075 E/knife: 梨里的knife内存地址:com.demo.dagger2demo2.Knife@336e5075 E/knife: kinfe在香蕉中的内存地址:com.demo.dagger2demo2.Knife@10ac0fa3
下一篇文章,说说Component之间的依赖关系
[
创作打卡挑战赛
赢取流量/现金/CSDN周边激励大奖
推荐学习资料
-
Android进阶学习全套手册
-
Android对标阿里P7学习视频
-
BAT TMD大厂Android高频面试题
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
转存中…(img-y3SqCrK3-1715144036890)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!