我可以在注入完成后立即 运行 编码吗?

Can I run code after right after the injection has been completed?

我在 Dagger 2 中得到了这个简单的 class:

@Inject public Bus bus;

@Inject
public TwitterAppModel() {
    bus.register(this);
}

这将不起作用,因为 bus 在构造函数中是 null。当注入完成并且 bus 不为空时,我可以以某种方式拦截(例如使用注释)吗?

我尝试过的:

如果我执行以下操作,它会起作用:

@Inject
public TwitterAppModel(Bus bus) {
    this.bus = bus;
}

在我的模块中:

@Provides
@Singleton
TwitterAppModel provideTwitterAppModel(Bus bus) {
    return new TwitterAppModel(bus);
}

我不太喜欢这个解决方案,它使重构变得更加困难,而且我不关心注入顺序。我使用的其他 IOC 框架有某种 event/annotation ,我可以用它在注入完成后执行代码。

我正在寻找类似的东西:

@Inject public Bus bus;

@Inject
public TwitterAppModel() {
}

@OnIjectComplete
public void onInit() {
    bus.register(this);
}

这将使代码更清晰,配置中的代码更少 classes(Dagger 已经足够了),如果我想添加一个新的,这个 class 会更容易删除我想在启动时使用的@Inject 无需在 2 个地方等处进行编辑

您要查找的@OnInjectComplete 注释已经存在。它叫做@Inject!在填充@Inject 字段后,将调用任何带有@Inject 的方法。如果该方法带有参数,则将注入这些参数。

所以尝试:

@Inject public Bus bus;

@Inject
public TwitterAppModel() {
}

@Inject
public void onInit() {
    bus.register(this);
}