hit是android的依賴注入庫 是andorid團(tuán)隊(duì)和Dagger2團(tuán)隊(duì)聯(lián)合起來開發(fā)的專門用于android的依賴注入庫
使用hit不需要向Dagger2一樣寫大量的Component代碼了
其中需要使用到的注解有:
使用方式:
一 :在項(xiàng)目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'
三:提供對(duì)象obj(和dagger2相同)
四:設(shè)置module(和dagger2相同)? 上面增加一個(gè)@InstallIn(ActivityComponent.class) 注解
五:所有使用hit的應(yīng)用都必須包含一個(gè)@HiltAndroidApp注解的application
六:在activity中使用
單例的使用:? 上面方法 如果設(shè)置兩個(gè)okHttpProcessor對(duì)象的話 不是一個(gè)
打印結(jié)果hashcode值不相同
如果使用單例的話? 如下:
需要將module中scope轉(zhuǎn)換為@InstallIn(ApplicationComponent.class) &&在provider方法上加上@SingleTon 即可
再次打印結(jié)果相同
接口注入:
一:定義接口
public interface CookInterface {
void cookFood();
}
二:設(shè)置實(shí)現(xiàn)類? 我這里設(shè)置了兩個(gè) 實(shí)現(xiàn)類上必須有構(gòu)造方法并加入對(duì)應(yīng)的注解
public class MotherCookimplements CookInterface{
@Inject
? ? public MotherCook() {
}
@Override
? ? public void cookFood() {
Log.d("拉拉","MotherCook注入成功");
? ? }
}
另一個(gè)
//保姆做飯
public class Nannyimplements CookInterface {
//構(gòu)造方法一定要有 &&必須加入注解@Inject
? ? @Inject
? ? public Nanny() {
}
@Override
? ? public void cookFood() {
Log.d("拉拉","Nanny注入成功");
? ? }
}
設(shè)置相應(yīng)的Modlue 注意這里適應(yīng)@Binds注解? 我這里設(shè)置了兩個(gè)方法提供對(duì)應(yīng)的實(shí)現(xiàn) 所以加上了限定符 @Named
@InstallIn(ActivityComponent.class)
@Module
public abstract class CookMoudle {
//使用@Binds注解 參數(shù)中傳入對(duì)應(yīng)的實(shí)體類
? ? @Named("key2")
@Binds
? ? abstract CookInterfaceproviderCook(Nanny nanny);
? ? @Named("key1")
@Binds
? ? abstract CookInterfaceproviderCook1(MotherCook nanny);
}
這里在activity中使用
打印結(jié)果:
Hilt 目前支持以下 Android 類:
Application(通過使用?@HiltAndroidApp)
ViewModel(通過使用?@HiltViewModel)
Activity
Fragment
View
Service
BroadcastReceiver