一.Hilt特点
- Hilt就是Android团队联系了Dagger2团队,一起开发出来的一个专门面向Android的依赖注入框架。
相比于Dagger2,Hilt最明显的特征就是:1. 简单。2. 提供了Android专属的API;
- Hilt做的优化包括:
- 无需编写大量的Component代码
- Scope也会与Component自动绑定
- 预定义绑定,例如 Application与Activity
- 预定义的限定符,例如@ApplicationContext与@ActivityContext
- 支持java8
二.使用
1.配置
buildscript {
repositories {
//...
}
dependencies {
//...
classpath 'com.google.dagger:hilt-android-gradle-plugin:2.28-alpha'
//...
}
}
apply plugin: 'dagger.hilt.android.plugin'
dependencies {
implementation "com.google.dagger:hilt-android:2.28-alpha"
annotationProcessor "com.google.dagger:hilt-android-compiler:2.28-alpha"
}
2.基本使用
- hilt的使用比dagger2的使用会少一个component,我们先看一下简单的使用;
- 定义javabean
public class Person {
}
//跟dagger2会的不同点,使用了InstallIn注解
//参数表示注入到哪类组件
@InstallIn(ActivityComponent.class)
@Module
public class BeanModule {
@Provides
public Person providePerson(){
return new Person();
}
}
- 在MainActivity中使用(少些了不少代码)
@AndroidEntryPoint
public class MainActivity extends AppCompatActivity {
@Inject
Person mPerson;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
System.out.println("mPerson " + (mPerson == null));
}
}
- 此时,还没有结束,使用hilt需要在自定义的Application类中添加@HiltAndroidApp注解
@HiltAndroidApp
public class MyApplication extends Application {
}
3.hilt提供的组件
- 关于@InstallIn注解的参数说明,其参数决定了注入器面向的对象,参数类型及其注入器对象的信息如下
![01.hitl组件](/upload/2024/01/01.hitl%E7%BB%84%E4%BB%B6.png)
- 如果需要使用 FragmentComponent 中定义的绑定并且视图是 Fragment 的一部分,应将 @WithFragmentBindings 注释和 @AndroidEntryPoint 一起使用。了解即可,学习原则:由简单常用的开始;
4.hilt组件生命周期
![02.组件生命周期](/upload/2024/01/02.%E7%BB%84%E4%BB%B6%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F.png)
5.hilt组件作用域
![03.组件作用域](/upload/2024/01/03.%E7%BB%84%E4%BB%B6%E4%BD%9C%E7%94%A8%E5%9F%9F.png)
6.接口的注入
public interface DiInterface {
void method();
}
public class DiInterfaceImpl implements DiInterface{
@Inject
public DiInterfaceImpl() {
}
@Override
public void method() {
Log.i("method","注入 success");
}
}
@Module
@InstallIn(ActivityComponent.class)
public abstract class DiInterfaceImplModule {
@Binds
public abstract DiInterface bindInterImpl(DiInterfaceImpl diInterface);
}
@AndroidEntryPoint
public class MainActivity extends AppCompatActivity {
@Inject
DiInterface mDiInterface;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDiInterface.method();
}
}
7.注意
xxx\.gradle\caches\modules-2\files-2.1\com.google.dagger\hilt-android-gradle-plugin\2.28-alpha\eb33a043b2bbdc7cdee3c851d0f8532bfd3645a5\hilt-android-gradle-plugin-2.28-alpha-
二.隔离层设计
- 简单理解就是,面向接口编程。然后,具体的实现通过注入的方式进行设置,该方案在项目中已经设计过,但是可以改用hilt,其有更多的好处;
评论区