Idea中Dagger2的使用

1. 简介

Dagger2是一个依赖注入框架,butterknife也是一个依赖注入框架。不过没有Dagger2好用,Dagger2的主要作用,就是对象的管理,其目的是为了降低程序耦合。

2. 注解介绍

@Inject :
这个注解有两种使用方式,一种是注解类的构造函数,一种是注解类的成员变量。
@Provides
这个注解的功能就是标注提供被注入的对象的方法,是为了弥补@Inject 注解出现的。
主要的作用是为了弥补@Inject注解的不足,因为@Inject在提供注入对象的时候必须要在构造函数上注解,那么这就存在局限。@Provides就是为了弥补这种局限的。
@Module
这个注解在我看来就是提供一个场所,用来生成被注入的对象的场所,由上文可以知道我们可以用过两种方式提供被注入的对象,@Inject 标识构造函数,@Provides 标识提供注入对象的方法。但是如果在整个项目中任意位置这么写的话,我想这个工作量可能会很巨大,所以就出现了Module注解,一是为了整理归拢当前需要的提供的注入对象,二是便于维护,当前module内的可以互相提供。
@Component
这个注解的功能就是来将提供的对象注入的指定的类中, 它可以知道它能从哪些地方来获取被注入的对象,它有一个方法能够调用当前类的注入工具去注入对象。更具体的说它的作用是将提供注入对象的场所和要去注入的类建立连接。
@Singleton
就是单例模式时使用的注解,被@singleton标记的@Provides方法的返回值是单例的

3. 添加依赖

compile 'com.google.dagger:dagger:2.22.1'
annotationProcessor 'com.google.dagger:dagger-compiler:2.22.1'

4. 编写IService 接口

package com.xl.look.core;

public interface IService {
    void init() throws Exception;
}

5. 编写你需要的接口并继承IService接口

package com.xl.look.api;

import com.xl.look.core.IService;

public interface XlService extends IService {
    void run();
}

6. 编写实现类

package com.xl.look.api;

import com.xl.filesync.rpc.XlServiceGrpc;

import javax.inject.Inject;
import javax.inject.Singleton;

@Singleton
public class XlServiceImpl extends XlServiceGrpc.XlServiceImplBase implements XlService {
    
    //有需要注入的对象可以使用@Inject注解
    @Inject
    IConfigService configService;

	//需要带有@Inject注解的构造函数
    @Inject
    public XlServiceImpl () {
    }

    @Override
    public void init() throws Exception {
        
    }

    @Override
    public void run() {
        
    }
}

7. 编写Module类

package com.xl.look.core;

import com.xl.look.api.XlServiceImpl ;
import com.xl.look.api.XlService;
import dagger.Module;
import dagger.Provides;

@Module
public class AppModule {
    @Provides
    XlService provideXlService(XlServiceImpl  service) {
        return service;
    }

}

8. 编写Component类

package com.xl.look.core;

import com.xl.look.api.XlService ;
import dagger.Component;

import javax.inject.Singleton;

@Singleton
@Component(modules = AppModule.class)
public interface AppComponent {
    XlService getXlService ();

}

9. 编译代码

点击Gradle中的build进行编译即可
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值