Java 从Injector访问Guice单例
我正在使用Guice在Java应用程序中创建一个单例。我在模块类中使用了以下方法:Java 从Injector访问Guice单例,java,dependency-injection,singleton,guice,Java,Dependency Injection,Singleton,Guice,我正在使用Guice在Java应用程序中创建一个单例。我在模块类中使用了以下方法: @Provides @Singleton public LinkedBlockingQueue<String> provideLinkedBlockingQueue() { return new LinkedBlockingQueue<>(); } @提供 @独生子女 公共LinkedBlockingQueue提供LinkedBlockingQueue(){ 返回新的Link
@Provides
@Singleton
public LinkedBlockingQueue<String> provideLinkedBlockingQueue() {
return new LinkedBlockingQueue<>();
}
@提供
@独生子女
公共LinkedBlockingQueue提供LinkedBlockingQueue(){
返回新的LinkedBlockingQueue();
}
在另一个类中,我尝试通过以下方式获取实例:
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();
公共类资源{
私有最终LinkedBlockingQueue缓冲队列;
@注入
公共资源(LinkedBlockingQueue缓冲队列){
this.bufferQueue=bufferQueue;
}
最后,我想从我的注入器访问应用程序中的同一个实例,我试着这样做:
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();
LinkedBlockingQueue缓冲队列=
getProvider(LinkedBlockingQueue.class).get();
这是在资源类和应用程序中从注入器共享实例的正确方法吗
这是在资源类和应用程序中从注入器共享实例的正确方法吗
不,不是
您应该使用Key
或TypeLiteral
而不是LinkedBlockingQueue.class
例如:
injector.getProvider(new Key<LinkedBlockingQueue<String>>(){}).get();
injector.getProvider(新键(){}).get();