2024年最新“一盘沙拉”带你入门Dagger2(五)之 @Scope,互联网大厂面试难度排行

【附】相关架构及资料

源码、笔记、视频。高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter全方面的Android进阶实践技术,和技术大牛一起讨论交流解决问题。

image

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事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;

    }

}



```
  1. 把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());
    
        }
    
    }
    
    
  2. 测试:内存地址是一样的,证明使用的是同一个实例。

    
    E/knife: 苹果里的knife内存地址:com.demo.dagger2demo2.Knife@16e3e55f
    
    E/knife: 梨里的knife内存地址:com.demo.dagger2demo2.Knife@16e3e55f
    
    

如何让香蕉用另一把刀呢,很简单煎饼果子来一套即可(在写一套Module和Component)

  1. Module

    
    @Module
    
    public class KnifeForBananaModule {
    
        @Provides
    
        public Knife provideKnife(){
    
            Knife knife = new Knife();
    
            return knife;
    
        }
    
    }
    
    
    
    
  2. Component

    
    @Component(modules = KnifeForBananaModule.class)
    
    public interface KnifeForBananaComponent {
    
        void inject(Banana banana);
    
    
    
    }
    
    
  3. 注入到香蕉里

    
    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());
    
        }
    
    }
    
    
  4. 测试:苹果和梨使用了同一个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行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 27
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值