hit是android的依赖注入库 是andorid团队和Dagger2团队联合起来开发的专门用于android的依赖注入库
使用hit不需要向Dagger2一样写大量的Component代码了
其中需要使用到的注解有:
使用方式:
一 :在项目build.gradle中引入插件
classpath 'com.google.dagger:hilt-android-gradle-plugin:2.28-alpha'
二:在app的build.gralde中
apply plugin: 'dagger.hilt.android.plugin'
//hilt
implementation "com.google.dagger:hilt-android:2.28-alpha"
annotationProcessor "com.google.dagger:hilt-android-compiler:2.28-alpha"
//net
implementation 'com.android.volley:volley:1.1.0'
implementation 'com.google.code.gson:gson:2.2.4'
implementation 'com.squareup.okhttp3:okhttp:3.4.1'
implementation 'org.xutils:xutils:3.3.36'
三:提供对象obj(和dagger2相同)
四:设置module(和dagger2相同) 上面增加一个@InstallIn(ActivityComponent.class) 注解
五:所有使用hit的应用都必须包含一个@HiltAndroidApp注解的application
六:在activity中使用
单例的使用: 上面方法 如果设置两个okHttpProcessor对象的话 不是一个
打印结果hashcode值不相同
如果使用单例的话 如下:
需要将module中scope转换为@InstallIn(ApplicationComponent.class) &&在provider方法上加上@SingleTon 即可
再次打印结果相同
接口注入:
一:定义接口
public interface CookInterface {
void cookFood();
}
二:设置实现类 我这里设置了两个 实现类上必须有构造方法并加入对应的注解
public class MotherCookimplements CookInterface{
@Inject
public MotherCook() {
}
@Override
public void cookFood() {
Log.d("拉拉","MotherCook注入成功");
}
}
另一个
//保姆做饭
public class Nannyimplements CookInterface {
//构造方法一定要有 &&必须加入注解@Inject
@Inject
public Nanny() {
}
@Override
public void cookFood() {
Log.d("拉拉","Nanny注入成功");
}
}
设置相应的Modlue 注意这里适应@Binds注解 我这里设置了两个方法提供对应的实现 所以加上了限定符 @Named
@InstallIn(ActivityComponent.class)
@Module
public abstract class CookMoudle {
//使用@Binds注解 参数中传入对应的实体类
@Named("key2")
@Binds
abstract CookInterfaceproviderCook(Nanny nanny);
@Named("key1")
@Binds
abstract CookInterfaceproviderCook1(MotherCook nanny);
}
这里在activity中使用
打印结果:
Hilt 目前支持以下 Android 类:
Application(通过使用 @HiltAndroidApp)
ViewModel(通过使用 @HiltViewModel)
Activity
Fragment
View
Service
BroadcastReceiver