什么是Dagger和Hilt
Dagger和Hilt都是安卓端的依赖注入框架
通过注解生成的方式,来取代手动创建对象的方式,来管理对象和其作用域
Dagger是Square公司出品的,而Hilt是由Google公司在Dagger的基础上优化而来
配置项目级别gradle
buildscript {
repositories {
mavenLocal()
maven { url 'https://jitpack.io' }
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/central' }
maven { url 'https://maven.aliyun.com/repository/releases' }
google()
mavenCentral()
}
dependencies {
classpath "com.android.tools.build:gradle:4.2.2"
classpath 'com.google.dagger:hilt-android-gradle-plugin:2.44'
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
配置模块级别gradle
apply plugin: 'com.android.application'
apply plugin: 'com.google.dagger.hilt.android'
android {
compileSdkVersion 30
defaultConfig {
applicationId "com.android.code"
minSdkVersion 28
targetSdkVersion 30
versionCode 1
versionName "1.1.1"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
buildFeatures {
viewBinding true
dataBinding true
}
}
dependencies {
api 'androidx.appcompat:appcompat:1.2.0'
api 'com.google.android.material:material:1.3.0'
api 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
//GSON
api 'com.google.code.gson:gson:2.8.7'
//RxJava2
api 'io.reactivex.rxjava2:rxjava:2.1.3'
api 'io.reactivex.rxjava2:rxandroid:2.0.1'
//Retrofit2
api 'com.squareup.retrofit2:retrofit:2.3.0'
api 'com.squareup.retrofit2:converter-gson:2.3.0'
api 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
//Dagger2
api 'org.glassfish:javax.annotation:10.0-b28'
api "com.google.dagger:dagger:2.47"
annotationProcessor "com.google.dagger:dagger-compiler:2.47"
//Hilt
api 'com.google.dagger:hilt-android:2.44'
annotationProcessor 'com.google.dagger:hilt-android-compiler:2.44'
}
Hilt使用方式
由于Hilt是个Dagger基础上优化而来,因此使用方式比较相似
这里我们只讲解Hilt的使用方式,不再讲解Dagger
-
在Application上添加@HiltAndroidApp注解
-
在需要注入对象的组件,比如Activity或Fragment上,添加@AndroidEntryPoint注解
-
在需要注入对象的组件中,通过@Inject注解定义对象
-
在需要注入对象的默认构造方法上,添加@Inject注解
-
如果需要在某个作用域内共享对象,可以在类名上添加作用域注解,如@Singleton,@ActivityScoped,@ViewScoped等
-
如果希望注入对象,在其子组件中重新注入仍然生效,可以通过@Module注解定义一个专门的模块类
-
Module类需要通过@InstallIn指定安装到哪个组件中,Module类还需要提供一个方法,用于生产对象
-
Module类中用于生产对象的方法,需要添加作用域注解,和@Provides注解
-
Module类中,Method上的作用域注解,和InstallIn指定的组件,范围必须对应文章来源:https://www.toymoban.com/news/detail-652682.html
Hilt参考代码文章来源地址https://www.toymoban.com/news/detail-652682.html
public class User extends BaseObservable {
public String account;
public String password;
public String name;
@Inject
public User() {
}
@Override
public String toString() {
return hashCode() + "";
}
}
@AndroidEntryPoint
@SuppressWarnings("all")
public class HomeActivity extends AppCompatActivity {
@Inject
User user1;
@Inject
User user2;
}
@Module
@InstallIn(ActivityComponent.class)
public class UserModule {
@ActivityScoped
@Provides
public static User injectUser() {
return new User();
}
}
到了这里,关于【Android】Dagger和Hilt新手快速入门的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!