从 Injector 访问 Guice 单例
Accessing a Guice singleton from Injector
我正在使用 Guice 在 Java 应用程序中创建单例。我在模块 class:
中使用了以下方法
@Provides
@Singleton
public LinkedBlockingQueue<String> provideLinkedBlockingQueue() {
return new LinkedBlockingQueue<>();
}
在另一个 class 中,我试图以这种方式获取实例:
public class Resource {
private final LinkedBlockingQueue<String> bufferQueue;
@Inject
public Resource(LinkedBlockingQueue<String> bufferQueue) {
this.bufferQueue = bufferQueue;
}
最后,我想从我的注入器访问我的应用程序中的同一个实例,我尝试这样做:
LinkedBlockingQueue<String> bufferQueue =
injector.getProvider(LinkedBlockingQueue.class).get();
这是在资源 class 和我的注入器应用程序之间共享实例的正确方法吗?
Is this the correct way to go about sharing an instance between the Resource class and in my application from my injector?
不,不是。
您应该使用 Key<LinkedBlockingQueue<String>>
或 TypeLiteral<LinkedBlockingQueue<String>>
而不是 LinkedBlockingQueue.class
。
例如:
injector.getProvider(new Key<LinkedBlockingQueue<String>>(){}).get();
我正在使用 Guice 在 Java 应用程序中创建单例。我在模块 class:
中使用了以下方法@Provides
@Singleton
public LinkedBlockingQueue<String> provideLinkedBlockingQueue() {
return new LinkedBlockingQueue<>();
}
在另一个 class 中,我试图以这种方式获取实例:
public class Resource {
private final LinkedBlockingQueue<String> bufferQueue;
@Inject
public Resource(LinkedBlockingQueue<String> bufferQueue) {
this.bufferQueue = bufferQueue;
}
最后,我想从我的注入器访问我的应用程序中的同一个实例,我尝试这样做:
LinkedBlockingQueue<String> bufferQueue =
injector.getProvider(LinkedBlockingQueue.class).get();
这是在资源 class 和我的注入器应用程序之间共享实例的正确方法吗?
Is this the correct way to go about sharing an instance between the Resource class and in my application from my injector?
不,不是。
您应该使用 Key<LinkedBlockingQueue<String>>
或 TypeLiteral<LinkedBlockingQueue<String>>
而不是 LinkedBlockingQueue.class
。
例如:
injector.getProvider(new Key<LinkedBlockingQueue<String>>(){}).get();