我对在并行环境中使用Guice有一个特定的问题。

我有一个带构造函数参数的runnable。

class task implements Runnable{
String dbname="";
task(String dbname)
{
this.dbname=dbname
}
@
Inject
private ICacheService cacheService
public void run(){
//logic here

}
bind(ICacheService).to(CacheServiceImpl.class);


}


问题:如何实例化Task。

我不能使用ExecutorService.submit(新的,因为这将不是正确的方法,并且违反了guice的目的。)

最佳答案

我将创建一个创建任务的工厂,通过任务中的构造函数注入ICacheService并使用javax.inject.Provider

public class TaskFactory {

    private Provider<ICacheService> cacheServiceProvider;

    @Inject
    public TaskFactory(Provider<ICacheService> cacheServiceProvider) {
        this.cacheServiceProvider = cacheServiceProvider;
    }

    public task create(String dbname) {
        return new task(dbname, cacheServiceProvider.get());
    }
}


class task implements Runnable {

    private final String dbname;
    private final ICacheService cacheService;

    public task(String dbname, ICacheService cacheService) {
        this.dbname = dbname;
        this.cacheService = cacheService;
    }

    @Override
    public void run() {

    }
}


完成此操作后,将注入TaskFactory,然后使用dbName调用create方法。

您也可以使用Guice中的AssistedInject进行类似的操作。

顺便说一句,班级名称应以大写字母开头。

09-16 06:00
查看更多