美文网首页AndroidAndroid开发经验谈Android技术知识
2. 【浅入深出理解 dagger、Hilt】 - dagger

2. 【浅入深出理解 dagger、Hilt】 - dagger

作者: zhongjh | 来源:发表于2022-04-27 16:20 被阅读0次

    上一篇写了简单的传统java代码,那么这篇就是介绍dagger2代码
    该简单场景代码是MainActivity里面有个MainEntity实体类,该实体类里面还有个属性是MainParameter,那么这次的代码是利用dargger2把实体依赖注入进Activity里面,Activity里面将会看不到new的代码。

    1. 实体和属性类,使用 @Inject 标记
    public class MainEntity {
    
        /**
         * 只允许有一个 @Inject,因为Component无法区别你需要什么样的对象
         */
        @Inject
        public MainEntity(MainParameter mainParameter) {
            this.mainParameter = mainParameter;
        }
    }
    
    public class MainParameter {
    
        @Inject
        public MainParameter() {
        }
    }
    

    当对构造函数标记了@Inject会为该类注入无参构造方法构造的对象,但是注意,如果注入的对象带有参数,如果该参数没有实例化,那么该参数将为null。例如代码里面的MainParameter,它的构造函数我同样给了@Inject标记,所以不会为null

    2. 使用@Component,类似中介类关联的意思
    @Component
    public interface MainComponent {
        /**
         * 该方法名随意起,不管起什么,起多少个,最终生成的代码都是参数跟注入的MainModel结合
         * 当然,只能放置一个参数,如果加入多个参数会运行编译报错
         */
        void inject(MainActivity activity);
    }
    

    @Component,用来管理依赖注入的细节,充当目标类和实例类之间的中介。当它发现目标类需要依赖,就会自动生成对应的实例,并注入到指定位置。

    3. 在Activity使用实体类
    public class MainActivity extends AppCompatActivity {
    
        @Inject
        MainEntity mainEntity;
    
        @Override
        public void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            DaggerMainComponent.builder().build().inject(this);
            mainEntity.setName("名称");
            mainEntity.getMainParameter().setName("名称2");
            ((TextView) findViewById(R.id.tvName)).append(mainEntity.getName() + "_" + mainEntity.getMainParameter().getName());
        }
    }
    

    大家可以看到,mainEntity没有使用new的相关代码,直接使用赋值

    该篇文章只是介绍了依赖注入的无参实体,那么有参数的实体如何构造呢?!请看下篇

    只是简单介绍依赖注入使用方式的实例源码如下:
    zhongjhATC/HiltAndDaggerDemo: 演示 Hilt、Dagger 的demo (github.com)

    其他相关文章
    1. 【浅入深出理解 dagger、Hilt】 - 简介 - 简书 (jianshu.com)
    2. 【浅入深出理解 dagger、Hilt】 - dagger无参依赖注入 - 简书 (jianshu.com)
    3. 【浅入深出理解 dagger、Hilt】 - dagger有参依赖注入 - 简书 (jianshu.com)
    4. 【浅入深出理解 dagger、Hilt】 - Hilt - 简书 (jianshu.com)

    相关文章

      网友评论

        本文标题:2. 【浅入深出理解 dagger、Hilt】 - dagger

        本文链接:https://www.haomeiwen.com/subject/eoefyrtx.html