gpt4 book ai didi

java - 基于自定义注解的绑定(bind)

转载 作者:行者123 更新时间:2023-11-30 09:47:23 24 4
gpt4 key购买 nike

我是 stackoverflow 和 guice 的新手。我不确定我正在尝试做的事情是否可以通过 guice 实现,但我确实希望如此。

我的问题域是我正在尝试编写一个文档阅读系统。我已经为 DocumentReader 定义了一个接口(interface)。

public interface DocumentReader {
MetaData readDocument() throws Exception
}

我还定义了一个枚举来定义支持的文件类型(即扩展名)。

public enum FileType {
doc,
png,
txt,
}

我对每个文件类型都有一个实现,提供了如何解析该文件类型的详细信息。

public class MSWordReaderImpl implements DocumentReader {
// ....
}

public class PlainTextReaderImpl implements DocumentReader {
// ....
}

至此,我已经成功编写并测试了一个模块,该模块使用 MapBinder 和 FactoryModuleProvider 来注入(inject)这些对象中的每一个。存在的每个 DocumentReader 实现都单独添加到 MapBinder。我希望随着 DocumentReader 的附加实现的编写,我可以简单地用它们支持的 FileType(s) 来注释它们,GUICE 将能够读取注释并将它们适本地添加到 MapBinder(我不必每次添加更新模块)。我的设想是这样的:

@SupportedFileTypes( filetypes={ doc, docx } )
public class MSWordReaderImpl implements DocumentReader {
// ....
}

@SupportedFileTypes( filetypes={txt} )
public class PlainTextReaderImpl implements DocumentReader {
// ....
}

我已经通读了 GUICE 文档好几遍,但我只是没有找到实现此目的的方法(如果可能的话!)。任何帮助将不胜感激。

谢谢!

最佳答案

您可以让您的模块扫描类将使用反射进入的包,查找实现 DocumentReader 并使用 @SupportedFileTypes 注释的类。当它找到一个时,将其添加到每种文件类型的 MapBinder

如果你不想扫描类路径,你仍然可以通过编写这样的方法来自己简化它:

private void bindDocumentReaders(Class<? extends DocumentReader>... types) {
for (Class<? extends DocumentReader> type : types) {
FileType[] supportedFileTypes = type.getAnnotation(SupportedFileTypes.class)
.filetypes();
// add to MapBinder for each file type
}
}

关于java - 基于自定义注解的绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6715217/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com