工厂模式迁移到Hilt的实现方法与最佳实践
时间:2026-08-15 | 作者:星际追番人 | 阅读:0工厂模式 → Hilt
老写法(Ja va — Factory/手动容器)
// ViewModel Factory
public class ItemViewModelFactory implements ViewModelProvider.Factory {
private final ItemRepository repository;
public ItemViewModelFactory(ItemRepository repository) {
this.repository = repository;
}
@Override
public extends ViewModel> T create(Class modelClass) {
if (modelClass.isAssignableFrom(ItemViewModel.class)) {
return (T) new ItemViewModel(repository);
}
throw new IllegalArgumentException("Unknown ViewModel class");
}
}
// 使用
ItemViewModelFactory factory = new ItemViewModelFactory(repository);
ItemViewModel vm = new ViewModelProvider(this, factory).get(ItemViewModel.class);
问题在哪里
核心问题是样板代码太多。
每多一个 ViewModel,通常就要多一个 Factory 类。十几个 ViewModel,往往就会对应十几个 Factory。
依赖链越长,Factory 里要传的依赖也越多。这样一来,维护成本会越来越高,代码也会更臃肿。
新写法(Hilt)
1. Application 配置
先在 Application 上添加 @HiltAndroidApp:
@HiltAndroidApp
class App : Application()
2. 提供依赖
需要提供给外部使用的依赖,可以放在 Module 中:
@Module
@InstallIn(SingletonComponent::class)
object AppModule {
@Provides @Singleton
fun provideOkHttp(): OkHttpClient = OkHttpClient.Builder().build()
@Provides @Singleton
fun provideRetrofit(client: OkHttpClient): Retrofit =
Retrofit.Builder().baseUrl("...").client(client).build()
@Provides @Singleton
fun provideApi(retrofit: Retrofit): ApiService =
retrofit.create(ApiService::class.ja va)
}
3. 构造函数注入
自己的类可以直接使用构造函数注入,不需要写在 Module 里:
class ItemRepository @Inject constructor(
private val api: ApiService
)
4. 在 ViewModel 和 Activity 中使用
ViewModel 和页面层的写法也会更直接:
@HiltViewModel
class ItemViewModel @Inject constructor(
private val api: ApiService,
private val repository: ItemRepository
) : ViewModel()
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
private val viewModel: ItemViewModel by viewModels()
}
一句话注意
用了 Hilt 之后,ViewModel Factory 这部分会自动生成,通常不必再手动去写。
只要配上 @HiltViewModel 和 @Inject constructor,基本就齐了。
至于依赖怎么来,也很直接:在类的构造函数里声明清楚,剩下的依赖树解析工作,Hilt 会自动接过去。
补充理解
Hilt 是构建在 Dagger 之上的,所有依赖注入代码都会在编译期生成。
所以在性能表现上,通常会比依赖运行时反射的方案更占优势,比如 Koin。
不过另一面也很现实:Hilt 的编译速度往往比 Koin 慢一些。
如果项目体量不大,或者本身就不太喜欢注解处理器,那么用 Koin 来替代,也是完全说得通的选择。
Ja va Android 老项目迁移系列,持续更新中。
免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。
相关文章
更多-
- 迅捷路由器怎么调信号最强,设置时要注意什么?
- 时间:2026-08-27
-
- vivo浏览器怎么卸不掉?原因和解决方法在这里
- 时间:2026-08-27
-
- OPPO R11s黑屏了,怎么强制恢复出厂设置?
- 时间:2026-08-27
-
- 飞利浦显示器包装盒有生产日期和保修期吗?怎么看?
- 时间:2026-08-27
-
- 联想新平板开机必须联网吗?怎么做?
- 时间:2026-08-27
-
- 平板横竖屏切换设置与问题解决
- 时间:2026-08-27
-
- 移动电源容量怎么测?要准备哪些工具?
- 时间:2026-08-27
-
- 荣耀90 Pro防水吗?防水级别多少?怎么用才安全
- 时间:2026-08-27
精选合集
更多大家都在玩
大家都在看
更多-
- 以下哪种食材被称为“地下苹果” 蚂蚁庄园今日答案9.18
- 时间:2026-09-17
-
- 蚂蚁庄园今天答题答案2026年9月18日
- 时间:2026-09-17
-
- 蚂蚁庄园答题今日答案2026年9月18日
- 时间:2026-09-17
-
- 蚂蚁庄园小课堂2026年9月18日最新题目答案
- 时间:2026-09-17
-
- 小鸡答题今天的答案是什么2026年9月18日
- 时间:2026-09-17
-
- 蚂蚁庄园每日答题答案2026年9月18日
- 时间:2026-09-17
-
- 蔬菜洗完掉色,说明是被染色了,是真的吗 蚂蚁庄园今日答案9月18日
- 时间:2026-09-17
-
- 满襟蜡绘花纹巧染就花纹当绣裳说的是哪种传统技艺 蚂蚁新村今日答案2026.9.17
- 时间:2026-09-17
