关于Dagger 2,我有一个愚蠢的问题要问。因为我想确定。我知道在编译时,Dagger会生成代码。但是对于以下代码:
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
//build main component along with core component
mainComponent = DaggerMainComponent
.builder()
.myModule(MyModule())
.coreComponent(DaggerCoreComponent.builder().build())
.build()
}
}
Dagger是否会调用build()来构建组件以在编译时或运行时绘制依赖关系图?我的理解是在运行时,对吗?
如果我在上面是正确的,那么下面的代码呢?:
@Module(subcomponents = MySubComponent.class)
abstract class MyModule {
...
}
我的理解是,使用此Dagger可以自动检测是否请求了
MySubComponent
,如果没有,它不会生成MySubComponent
中托管的依赖项。但是,此过程是否在运行时或编译时发生? 最佳答案
依赖关系图是在编译时通过注释处理构建的。 Dagger将根据您添加到类中的注释(例如DaggerMainComponent
,@Module
,@Component
等),从示例中生成类似@Inject
的类。
我建议您阅读有关注释处理的文章,例如one:
那么什么是注释处理?注释是一种标记机制,您可以在类,方法或参数上标记一些元,并且注释处理将在编译时分析那些注释并根据您的注释为您生成类。
在运行时调用build()
,您可以打开DaggerMainComponent
的代码并检查build
方法的实现,它将创建一些依赖模块的实例,检查其他需求,最后创建一个。
关于android - 依赖关系图的构建是否在Dagger 2中的编译时或运行时进行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58549169/