Dagger2使用(四)一个简单的Dagger依赖注入过程

        实例为一个简单的Android应用,使用AndroidStudio;创建了一个BookModel,在activity中使用TextView显示该BookModel信息。

        未使用Dagger的常规实现如下:

public class TestDaggerMainActivity extends BaseActivity {
    TextView mShowInfoView;
    BookModel mBook;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test_dagger_main);
        //
        initDatas();
        initViews();
        showBookinfo();
    }

    private void initDatas() {
        mBook = new BookModel("testBook", 25);
    }

    private void initViews() {
        mShowInfoView = (TextView)findViewById(R.id.showBookInfo_view);
    }
    private void showBookinfo() {
        mShowInfoView.setText(mBook.toString());
    }
}


        BookModel.java的定义:

public class BookModel {
    private String name;
    private float price;

    public BookModel() {
    }
    public BookModel(String name, float price) {
        this.name = name;
        this.price = price;
    }
    //getter setter省略
    @Override
    public String toString() {
        return "[" + name + "\t" + price + "元]";
    }
}

1.  配置build.gradle

        1)需要配置apt插件,没有这插件,dagger可能不会正常工作,特别是在Android studio中。

        2)需要配置“ javax.annotation”,Dagger2中会用到@Generated注解,而javax.anotation.generated在Android API 中没有。

apply plugin: 'android-apt'

//
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
    }
}

//dependencies中的配置
//for dagger2 
apt 'com.google.dagger:dagger-compiler:2.0'
compile 'com.google.dagger:dagger:2.0'
// Dagger2中会用到@Generated注解,而javax.anotation.generated在Android API 中是没有.
compile 'org.glassfish:javax.annotation:10.0-b28'

 

2.     构建依赖

        Dagger2中,这个负责提供依赖的组件被称为Module。使用@Module标识类型为module,并用@Provides标识提供依赖的方法。

        构建的ActivityModule代码如下所示。

@Module
public class ActivityModule {
    @Provides
    BookModel provideUserModel() {
        return new BookModel("testBook", 25);
    }
}

 

3.     构建Injector

        连接提供依赖和消费依赖对象的组件被称为Injector;Dagger2中,我们将其称为Component。

        Component是一个使用@Component标识的Javainterface。interface的inject方法需要一个消耗依赖的类型对象作为参数。

        注意:这里必须是真正消耗依赖的类型TestDaggerMainActivity(实际的消耗依赖的类),而不可以写成其父类等。

        ActivityComponent代码如下,代码编译后,会自动生成实现类“DaggerActivityComponent”,在构建依赖注入时需要用到。

@Component(modules = ActivityModule.class)
public interface ActivityComponent {
    void inject(TestDaggerMainActivity activity);
}

 

4.     完成依赖注入

        在TestDaggerMainActivity中构建Injector对象,完成注入。

        注:BookModel mBook 不能定义为private。注:BookModel mBook 不能定义为private。

public class TestDaggerMainActivity extends BaseActivity {
    private ActivityComponent mActivityComponent;
    TextView mShowInfoView;
//
    @Inject
    BookModel mBook;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test_dagger_main);
        //
        initDatas();
        initViews();
        showBookinfo();
    }

    private void initDatas() {
//构建Injector对象及完成注入
        mActivityComponent = DaggerActivityComponent.builder()
.activityModule(new ActivityModule()).build();
        mActivityComponent.inject(this);
    }

    private void initViews() {       
        mShowInfoView = (TextView)findViewById(R.id.showBookInfo_view);
    }
    private void showBookinfo() {
        mShowInfoView.setText(mBook.toString());
    }
}


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值