gpt4 book ai didi

java - 为什么我注入(inject)的依赖的方法没有运行?

转载 作者:行者123 更新时间:2023-11-30 10:58:36 24 4
gpt4 key购买 nike

我正在尝试重构一些依赖单例对象的代码,我意识到这在 Java 中存在问题。我的目标是创建我的 AES 密码类的线程安全实例化,我可以在我的整个应用程序中访问它。

按照几个关于 Guice 的教程,我有这个非常基本的场景:

服务等级

@Singleton
public class AESCipherService { // service class

@Inject
AESCipherService() {}

public void makeKeys() {
Log.d(Constants.TAG, "aes cipher generating keys");
}
}

模块类

这让我感到困惑,因为我的服务类没有子类,但我看到的所有示例都是关于将服务父类(super class)绑定(bind)到它的一个子类的。

public class AppInjectorModule extends AbstractModule {

@Override
protected void configure() {
bind(AESCipherService.class);
}
}

应用类

public class MyApplication {

private AESCipherService cipher;

@Inject
public void setCipher(AESCipherService cipher) {
this.cipher = cipher;
}

public void makeKeys() {
cipher.makeKeys();
}
}

最后,onCreate Activity 应该从中启动:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash_screen);

Log.d(Constants.TAG, "dependency injection test starting");

Injector injector = Guice.createInjector(new AppInjectorModule());

// EDIT: added this line, but it never prints!
Log.d(Constants.TAG, "injector instantiated");

// instantiates the singleton object ???
MyApplication app = injector.getInstance(MyApplication.class);
app.makeKeys();
}

不幸的是,我得到的唯一输出是dependency injection test starting。我没有看到 aes 密码生成 key ,正如我希望的那样。

依赖注入(inject)哪里出错了?

编辑:我添加了一些打印语句来查看失败的地方。似乎它永远不会从实例化注入(inject)器对象中返回。知道为什么会失败吗?它清楚地解释了为什么我的服务类没有运行。

最佳答案

您没有按照惯用方式使用 Guice。使用 Guice 的正确方法是在启动时创建注入(inject)器一次,使用它来创建您的初始类(在本例中为 Activity),然后让注入(inject)框架创建您的所有注入(inject)链。

创建注入(inject)器是一项昂贵、缓慢的操作,因此您不想在点击按钮时调用它;它应该在应用程序启动时发生,这样用户就不会注意到它。

由于您正在为 Android 开发,请考虑使用 Roboguice为了正确使用 Guice。请参阅:Using Guice to inject dependencies into an Android activity's constructor

与此同时,尝试在 Activity 的构造函数中调用 Guice.createInjector,将其保存为实例字段,然后在 onCreate 中调用 getInstance > 方法。

关于java - 为什么我注入(inject)的依赖的方法没有运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32187627/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com