Dagger2入门系列二:Module&Component源码分析,阿里蚂蚁金服五面

   日期:2024-12-26    作者:zhulaoshi 移动:http://oml01z.riyuangf.com/mobile/quote/50526.html

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


特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号