2.Hilt注入框架

Hilt是对Dagger2的二次封装

1.采用代理方式实现隔离层架构
2.采用Hilt反射实现隔离层架构
3.Hilt实现的源码原理

任何高大上的框架,都是使用 ASM+APT+注解+反射+动态代理+设计模式

Hilt就是Android团队联系了Dagger2团队,一起开发出来的一个专门面向Android的依赖注入框
相比于Dagger2,Hilt最明显的特征就是:1. 简单。2. 提供了Android专属的API。

Hilt就相当于你使用Retrofit (OkHttp)

Hilt的使用

(1)Hilt基本配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//在总gradle中的dependencies代码快导入gradle-plugin(使用字节码插庄)
classpath 'com.google.dagger:hilt-android-gradle-plugin:2.28-alpha'


//在app模块的gradle中导入插件
apply plugin: 'dagger.hilt.android.plugin'

// hilt(Hint的支持80%来自Dagger)
implementation "com.google.dagger:hilt-android:2.28-alpha"
//Dagger的注解处理器依赖使用
annotationProcessor "com.google.dagger:hilt-android-compiler:2.28-alpha"


// kotlin
// katp "com.google.dagger:hilt-android-compiler:2.28-alpha"

// 支持java8
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}

(2)Hilt的基本使用

Hilt做的优化:

  • 无需编写大量的Component代码
  • Scope也会与Component自动绑定
  • 预定义绑定,例如 Application与Activity
  • 预定义的限定符,例如@ApplicationContext与@ActivityContext

1.提供一个对象

1
2
public class HttpObject {
}

2.编写Module

  • @InstallIn(ActivityComponent.class)
  • @Module
  • @Provides
1
2
3
4
5
6
7
8
@InstallIn(ActivityComponent.class)
@Module
public class HttpModule {
@Provides
public HttpObject getHttpObject(){
return new HttpObject();
}
}

3.注入到Activity

  • @AndroidEntryPoint
  • @Inject
1
2
3
4
5
6
7
@AndroidEntryPoint
public class MainActivity extends AppCompatActivity {
@Inject
HttpObject httpObject;
@Inject
HttpObject httpObject2;
}

4.Application中注册

  • @HiltAndroidApp
1
2
3
@HiltAndroidApp
public class MyApplication extends Application {
}

5.全局单例使用

  • @Singleton
1
2
3
4
5
6
7
8
9
10
@InstallIn(ApplicationComponent.class)
@Module
public class HttpModule {
@Provides
@Singleton
public HttpObject getHttpObject(){
return new HttpObject();
}
}

6.为接口注入实例

  • @Binds
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public interface AnalyticsService {
void analyticsMethods();
}


public class AnalyticsServiceImpl implements AnalyticsService {
...
@Inject
AnalyticsServiceImpl(...) {
...
}
}


@Module
@InstallIn(ActivityComponent.class)
public abstract class AnalyticsModule {
@Binds
public abstract AnalyticsService bindAnalyticsService(
AnalyticsServiceImpl analyticsServiceImpl
);
}

(3)Hilt 提供了以下内容

组件

组件.png

组件的生命周期

组件的生命周期.png

相应的作用域

相应的作用域.png

Hilt原理

APT注解处理器 + ASM字节码插庄

Hilt的接口与实现注入simple

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2023-2025 Annie
  • Visitors: | Views:

嘿嘿 请我吃小蛋糕吧~

支付宝
微信