分享好友 最新动态首页 最新动态分类 切换频道
Dagger2入门系列二:Module&Component源码分析,阿里蚂蚁金服五面
2024-12-26 20:25

@Component(modules = Test1Module.class)

public interface Test1Component {

void inject(Test1Activity activity);

}

1.4、Activity类


public class Test1Activity extends AppCompatActivity {

@Inject

Student student;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_test1);

ButterKnife.bind(this);

initDatas();

}

private void initDatas() {

DaggerTest1Component.builder()

// .test1Module(new Test1Module(this))

.build()

.inject(this);

}

@OnClick(R.id.btn1)

public void onViewClicked() {

Toast.makeText(this, student.toString(), Toast.LENGTH_SHORT).show();

}

}

2、源码解析

======

打开目录结构

我们不难发现,编译器已经帮我们生成了这样几个文件

  • Student_Factory

  • DaggerTest1Component

  • Test1Activity_MembersInjector

  • Test1Activity_ViewBinding(不用管,butterknife

我们一一进行分析

2.1、Student_Factory


上一篇文章我们已经进行了分析,很简单,当我们@Inject注解一个类的构造方法时,编译器会自动帮我们生成一个工厂类,负责生产该类的对象类似于商品的厂家

package com.gs.dagtest1.bean;

import dagger.internal.Factory;

public final class Student_Factory implements Factory {

private static final Student_Factory INSTANCE = new Student_Factory();

@Override

public Student get() {

return provideInstance();

}

public static Student provideInstance() {

return new Student();

}

public static Student_Factory create() {

return INSTANCE;

}

public static Student newStudent() {

return new Student();

}

}

2.2、DaggerTest1Component


public final class DaggerTest1Component implements Test1Component {

private DaggerTest1Component(Builder builder) {}

public static Builder builder() {

return new Builder();

}

public static Test1Component create() {

return new Builder().build();

}

@Override

public void inject(Test1Activity activity) {

injectTest1Activity(activity);

}

private Test1Activity injectTest1Activity(Test1Activity instance) {

Test1Activity_MembersInjector.injectStudent(instance, new Student());

return instance;

}

public static final class Builder {

private Builder() {}

public Test1Component build() {

return new DaggerTest1Component(this);

}

@Deprecated

public Builder test1Module(Test1Module test1Module) {

Preconditions.checkNotNull(test1Module);

return this;

}

}

}

2.3、Test1Activity_MembersInjector


public final class Test1Activity_MembersInjector implements MembersInjector {

private final Provider studentProvider;

public Test1Activity_MembersInjector(Provider studentProvider) {

this.studentProvider = studentProvider;

}

public static MembersInjector create(Provider studentProvider) {

return new Test1Activity_MembersInjector(studentProvider);

}

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如何做好面试突击,规划学习方向

面试题集可以帮助你查漏补缺,有方向有针对性的学习,为之后进大厂做准备。但是如果你仅仅是看一遍,而不去学习和深究。那么这份面试题对你的帮助会很有限。最终还是要靠资深技术水平说话。

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。建议先制定学习计划,根据学习计划把知识点关联起来,形成一个系统化的知识体系。

学习方向很容易规划,但是如果只通过碎片化的学习,对自己的提升是很慢的。

同时我还搜集整理2020年字节跳动,以及腾讯,阿里,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 Xmind(实际上比预期多花了不少精力,包含知识脉络 + 分支细节

在搭建这些技术框架的时候,还整理了系统的高级进阶教程,会比自己碎片化学习效果强太多。

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

年字节跳动,以及腾讯,阿里,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 Xmind(实际上比预期多花了不少精力,包含知识脉络 + 分支细节

[外链图片转存中…(img-JN39YdwE-1711745469655)]

在搭建这些技术框架的时候,还整理了系统的高级进阶教程,会比自己碎片化学习效果强太多。

[外链图片转存中…(img-OvAAMA4n-1711745469656)]

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

最新文章
网页百度收录条件 掌握百度收录法则,优化关键词新媒体爆文秘籍
在当今信息爆炸的时代,互联网已成为知识传播、品牌展示与商业交流不可或缺的平台而百度,作为中国乃至全球领先的搜索引擎,其收录机制直接影响着网站在浩瀚网络世界中的可见度和影响力了解并遵循“网页百度收录条件”,对于任何希望在网络
网站建设流程?网站建设攻略。
一个高效的网站建设需要遵从的流程:主题确定、选择建站平台、样式规划、内容拟定、上线及推广。一、企业网站:企业创建网站主要为了宣传企业文化和产品展示。目的就是为了做好线上客户的营销转化。那么一个成功的企业网站技巧包括使用简洁
论文AI疑似率太高怎么办?快用这5款工具!
正在写论文的小伙伴们可能已经发现了,知网、维普、万方都上线了论文AIGC疑似率检测,论文的AIGC疑似率成为评判论文的重要指标,这让用AI辅助写论文的小伙伴们忧心忡忡。不过别担心!俗话说,“三步之内必有
服务器虚拟化服务是如何收费的?
服务器虚拟化是一种将物理服务器划分为多个虚拟机的技术,可以提高资源利用率、降低成本并简化管理,在实施服务器虚拟化时,企业需要考虑各种费用因素,包括软件许可费、硬件成本、维护和管理费用等,以下将对服务器虚拟化的进行详细介绍:
竞价推广代运营账户,让您的投入加倍产出!
竞价推广代运营账户:让您的投入加倍产出!随着互联网的发展,竞价推广已经成为企业推广的重要手段之一。然而,对于许多中小企业来说,自己运营竞价推广账户可能存在一定的难度和风险。这时候,选择专业的竞价推广代运营公司就显得尤为重要
郑州专业建设与SEO推广,助力品牌形象高效提升
郑州专业搭建与优化推广服务,助力企业打造高效品牌形象。通过精心设计、技术优化和推广,提升品牌知名度,增强市场竞争力,实现业务增长。郑州建设解析郑州优化与推广策略在互联网技术迅猛发展的今天,企业越来越意识到构建一个高效、专业
畅玩手机单机破解版游戏推荐及安全下载指南
随着智能手机的普及,越来越多的玩家开始追求在手机上畅玩各种单机游戏。单机游戏因其便捷性和离线游玩的特点,成为了许多人打发时间的首选。在众多可供选择的游戏中,破解版单机游戏因其解锁了所有功能和资源,受到越来越多玩家的青睐。单
高清美女写真生成新体验!如何用AI绘画工具轻松制作自己的数字美女?
限时免费,点击体验最近超火的AI生图神器,坐拥3000美女的大男主就是你! https://ai.sohu.com/pc/generate/textToImg?_trans_=030001_yljdaimn 在这个数字时代,谁不想拥有一张完美的美女写真呢?想象一下,在家中随手一拍,便能生成逼真
漫画台app手机版 v3.4.2
漫画台app手机版是一款漫画爱好者们所喜爱的手机漫画浏览软件,里面收录了海量的漫画资源作品,资源丰富,题材新颖质量高,每天都会有实时更新的漫画作品等你来看,它有榜单排行、高清画质、极速缓存等强大功能等你来发现,漫迷们不容错过
超激!2003 年度十大熱門手機排行榜 (一)
【記者/徐梅菁報導】年度話題手機五強出爐2003 年手機熱門排行出爐了!比價王的排行是根據網友查詢手機價格的熱門度來累計,雖然與通路間實際熱門銷售會有差異,但是相信哪些手機比較能夠引起網友們的好奇、比較受到歡迎、具有話題性的手
相关文章
推荐文章
发表评论
0评