我想在不引入注释或使用字符串键名的情况下完成以下操作,是否可以使用Guice?此外,引入第三个私有模块MyService及其ExecutorService绑定并不理想,因为我希望ExecutorService成为整个应用程序的单例,不仅可以注入,还可以注入MyService其他类,MyOtherService例如.
public class Main {
public static void main(String[] args) {
final Injector injector = Guice.createInjector(new MyAppModule());
final MyService service = injector.getInstance(MyService.class);
service.printInternals();
// Ideally this would print something like:
// My Executor: ExecutorImplClass@1
// Red Executor: ExecutorImplClass@2
// Blue Executor: ExecutorImplClass@3
}
}
public class MyAppModule extends PrivateModule {
@Override
protected void configure() {
install(new RedModule());
install(new BlueModule());
bind(ExecutorService.class).toInstance(Executors.newSingleThreadExecutor());
bind(MyService.class).to(MyServiceImpl.class);
expose(MyService.class);
}
}
public class BlueModule extends PrivateModule { …Run Code Online (Sandbox Code Playgroud) 说我有以下目录结构
/root/dir
/root/dir/file1.txt
/root/dir/subdir
/root/dir/subdir/file2.txt
Run Code Online (Sandbox Code Playgroud)
假设我将使用以下访客:
class MyFileVisitor extends SimpleFileVisitor<Path> {
@Override
public FileVisitResult visitFile(final Path file, final BasicFileAttributes attrs)
throws IOException {
if(Files.isDirectory(file)) {
throw new IllegalStateException("WAT!? Visiting directory: "+file.toAbsolutePath().toString());
}
System.out.println("Visiting file: "+file.toAbsolutePath().toString());
return super.visitFile(file, attrs);
}
Run Code Online (Sandbox Code Playgroud)
如果我们使用walkFileTree的简单重载:
Files.walkFileTree(Paths.get("/root/dir"), new MyFileVisitor());
Run Code Online (Sandbox Code Playgroud)
一切都按计划进行,我们看到以下输出:
Visiting file: /root/dir/file1.txt
Visiting file: /root/dir/subdir/file2.txt
Run Code Online (Sandbox Code Playgroud)
但是,当我们尝试设置最大深度时,事情开始崩溃:
Files.walkFileTree(Paths.get("/root/dir"), EnumSet.noneOf(FileVisitOption.class), 1, new MyFileVisitor());
Run Code Online (Sandbox Code Playgroud)
输出:
Visiting file: /root/dir/file1.txt
java.lang.IllegalStateException: WAT!? Visting directory: /root/dir/subdir
Run Code Online (Sandbox Code Playgroud)
我很确定这是一个错误,但是我想先问一下社区:我缺少什么了吗,这实际上是预期的行为吗?感谢您的确认!
细节:
java -version
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) …Run Code Online (Sandbox Code Playgroud)