我是guice的新手。
我有一个文件(json文件),我在其中定义了一些数据。这是可选的。如果文件存在,我必须从文件中读取数据(使用FileBasedImpl)。否则,我应该从" DefaultImpl"中获取数据。 class,我返回硬编码数据。
如何通过guice绑定实现这一目标?
interface SomeService {
Map<String, String> getData();
}
class FileBasedImpl implements SomeService {
/* Reads from a file */
Map<String, String> getData() {
//Check if file is present, then read the data
}
}
class DefaultImpl implements SomeService {
/* Returns hard-coded data */
Map<String, String> getData() {
return new HashMap()<>..;
}
}
答案 0 :(得分:1)
您可以创建一个提供程序(通过实现接口或向模块添加一个提供方法),该提供程序尝试读取内容并根据结果提供一个或另一个bean:
...
@Provides
public SomeService someService() {
File file = ....;
return (file.exists) ? new FileBasedImpl(file) : new DefaultImpl();
}
...
但要注意,模块中的条件逻辑是documented anti-pattern。但在这种情况下,这是一个很好的工作解决方案,有时候必须要做......