Dagger2使用

引入

project的build.gradle添加

dependencies {

    ... // 其他classpath

    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' //添加apt命令

 }

module的build.gradle添加

// 添加其他插件

apply plugin:'com.neenbedankt.android-apt'//添加apt命令

dependencies {

   apt 'com.google.dagger:dagger-compiler:2.0.2' //指定注解处理器

   compile 'com.google.dagger:dagger:2.0.2' //dagger公用api

   provided 'org.glassfish:javax.annotation:10.0-b28'  //添加android缺失的部分javax注解

}

 注解

Ø  @Inject:

Ø  通常在需要依赖的地方使用这个注解。换句话说,你用它告诉Dagger这个类或者字段需要依赖注入。这样,Dagger就会构造一个这个类的实例并满足他们的依赖。

Ø  @Module:

Ø  Modules类里面的方法专门提供依赖,所以我们定义一个类,用@Module注解,这样Dagger在构造类的实例

Ø  时候,就知道从哪里去找到需要的 依赖。modules的一个重要特征是它们设计为分区并组合在一起(比如说,

Ø  我们的app中可以有多个组成在一起的modules)

Ø  @Provide:

Ø  在modules中,我们定义的方法是用这个注解,以此来告诉Dagger我们想要构造对象并提供这些依赖。

Ø  @Component:

Ø  Components从根本上来说就是一个注入器,也可以说是@Inject和@Module的桥梁,它的主要作用就是连接这两个部分。 Components可以提供所有定义了的类型的实例,比如:我们必须用@Component注解一个接口然后列出所有的

 

 案例

简单案例使用1:

 

public class MainActivity extends AppCompatActivity{

    @Inject
   
ApiService apiService;

    @Override
   
protected void onCreate(BundlesavedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //builde之后出现的类
       
DaggerUserComponet.create().inject(this);

        apiService.register();


    }
}

 
@Component(modules ={UserModel.class} )
public interface UserComponet {

    void inject(MainActivity activity);

}
@Module
public class UserModel {

    @Provides
    public ApiService provideApiService(){
        return new ApiService();
    }
}
 
 
public class ApiService {

        public ApiService(){

            Log.d("ApiService","ApiService");

        }
        public  void  register(){

            Log.d("ApiService--User", "---------------ApiService" );

        }
}

进阶使用2;

public class MainActivity extends AppCompatActivity{
   
@Inject
   
UserManger userManger;

    @Override
   
protected void onCreate(BundlesavedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


       
DaggerUserComponet.builder().userModel(new UserModel()).build().inject(this);//等价于DaggerUserComponet.create().inject(this);

       
userManger.register();

    }

@Component(modules ={UserModel.class} )
public interface UserComponet {

    void inject(MainActivityactivity);

}

 

@Module
public class UserModel {

//    //方式一
//    @Provides
//    public ApiServiceprovideApiService(){
//        return new ApiService();
//    }
   
@Provides
   
public UserMangerprovideUserManger(ApiService apiService) {
        return new UserManger(apiService);
    }
}

 

public class UserManger {
    private ApiService mApiService;
    public UserManger(ApiService apiService){
        mApiService =apiService;
    }
    public void  register(){
        mApiService.register();
    }
}

public class ApiService {

   private String TAG="ApiService";
//方式二
    @Inject
       
public ApiService(){

            Log.d("ApiService","ApiService");
        }

        public  void  register(){

          Log.e(TAG, "---------------ApiService");
        }
}

如果ApiService带参数的话

@Inject
   
public ApiService(Stringurl){

        Log.d("ApiService","ApiService");
    }

 

那么在UserModel

@Provides
public String provideurl(){
    return  "www.baidu.com";
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值