Dagger2的简单使用

使用前的配置

在Module级的gradle文件中加入:

dependencies:

apt 'com.google.dagger:dagger-compiler:2.0'
compile 'com.google.dagger:dagger:2.0'
provided 'org.glassfish:javax.annotation:10.0-b28'
在开头:

apply plugin: 'com.neenbedankt.android-apt'
在app级的gradle中:

dependencies:

classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'

4个基本标签

  • @Inject Inject主要有两个作用,一个是使用在构造函数上,通过标记构造函数让Dagger2来使用(Dagger2通过Inject标记可以在需要这个类实例的时候来找到这个构造函数并把相关实例new出来)从而提供依赖,另一个作用就是标记在需要依赖的变量让Dagger2为其提供依赖。
  • @Provide 用Provide来标注一个方法,该方法可以在需要提供依赖时被调用,从而把预先提供好的对象当做依赖给标注了@Injection的变量赋值。provide主要用于标注Module里的方法
  • @Module 用Module标注的类是专门用来提供依赖的。有的人可能有些疑惑,看了上面的@Inject,需要在构造函数上标记才能提供依赖,那么如果我们需要提供的类构造函数无法修改怎么办,比如一些jar包里的类,我们无法修改源码。这时候就需要使用Module了。Module可以给不能修改源码的类提供依赖,当然,能用Inject标注的通过Module也可以提供依赖
  • @Component Component一般用来标注接口,被标注了Component的接口在编译时会产生相应的类的实例来作为提供依赖方和需要依赖方之间的桥梁,把相关依赖注入到其中。

不使用@Module标签的方法:

1,在使用的activity中的对象(比如Student类)声明上加上@Inject标签
2,在要注入的对象(比如Student类里的构造方法)的构造方法上加入@Inject标签
3,创建一个接口比如叫做AppComponent,在这个接口上加上@Component注解,在这个接口中声明对应要注入类的抽象方法,比如injectStudent(Activity activity),注意这里的activity必须要传入当前使用的activity才行,比如我在MainActivity中要注入Student,这里方法参数就写上MainActivity activity。
4,重新Rebuild一下项目,在MainActivity中:
DaggerAppComponent.builder().build().injectStudent(this);
这里DaggerAppComponent是在 Rebuild后自动生成的类,injectStudent(this)是我们在接口中声明的方法
这样,Student就实例化完成了,可以直接调用该类对象的方法

使用@Module标签:(@Module标签是用来在为第三方的类提供依赖注入的情况下使用的,这样的类大多只有jar,没有源码,就不能在它们的构造方法上加@Inject了,所以要用到@Moudule)

1,在使用的activity中的对象(比如Student类)声明上加上@Inject标签
2,创建AppComponent,声明注入的抽象方法,类上添加@Component标签
3,创建MyMoudle类,在类上声明@Moudle标签,加入对应的注入方法比如public Student provideStudent(),在方法上声明@Provides标签
4,在AppComponent中的@Component后面加入(modules = MyMoudle.class)
5,在用到的Acitivty中,Rebuild后,DaggerMyComponent.builder().myMoudle(new MyMoudle).builde().injectStudent();
其中myMoudle()方法对应声明的@Moudle的类的名字,不是固定的
这样就完成了使用@Moudle标签方法来完成注解,这种方式不用再对应的Studnet的构造方法上加上@Infect,只要在使用它的Activity上的声明Studnet对象引用的地方加上@Inject就行了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这里提供一个简单的 Android Dagger2 的案例 demo,使用 Dagger2 实现依赖注入,实现了一个简单的计算器功能。 首先,在 build.gradle 中添加依赖: ``` dependencies { implementation 'com.google.dagger:dagger:2.x' annotationProcessor 'com.google.dagger:dagger-compiler:2.x' } ``` 然后,定义依赖关系。在这个例子中,我们定义了两个依赖:Calculator 和 CalculatorModule。Calculator 是一个接口,CalculatorModule 是一个模块,其中包含了用于实例化 Calculator 对象的方法。 ``` public interface Calculator { int add(int a, int b); } @Module public class CalculatorModule { @Provides Calculator provideCalculator() { return new CalculatorImpl(); } } ``` 其中,CalculatorImpl 是 Calculator 接口的实现类,用于实现 add 方法。 ``` public class CalculatorImpl implements Calculator { @Override public int add(int a, int b) { return a + b; } } ``` 在 Activity 中,我们需要使用 Calculator 对象,可以通过 @Inject 注解实现依赖注入。 ``` public class MainActivity extends AppCompatActivity { @Inject Calculator calculator; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); DaggerCalculatorComponent.create().inject(this); int result = calculator.add(1, 2); Toast.makeText(this, "1 + 2 = " + result, Toast.LENGTH_SHORT).show(); } } ``` 其中,DaggerCalculatorComponent 是 Dagger2 自动生成的 Component 类,用于创建 Calculator 对象,并注入到 MainActivity 中。 最后,我们需要定义一个接口,用于将 CalculatorModule 和 MainActivity 连接起来。 ``` @Component(modules = {CalculatorModule.class}) public interface CalculatorComponent { void inject(MainActivity activity); } ``` 以上就是 Android Dagger2 的一个简单 demo。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值