spring 如何根据对象的类型将对象保存到存储库

noj0wjuj  于 9个月前  发布在  Spring
关注(0)|答案(2)|浏览(80)

我有一个控制器,它接收一个对象。这个对象代表文档,这个文档可以是某种文档类型之一。
根据文档类型,我应该将其保存到特定的存储库。

例如:

有三种文件类型:ImageDocumentArticleDocumentVideoDocument
如果控制器接收到ImageDocument,则应将其保存到ImageDocumentRepository中,如果控制器接收到ArticleDocument,则应将其保存到ArticleDocumentRepository中,以此类推
哪种方式是实现这一逻辑的最佳方式?
我不想自动连接所有的存储库,并创建switch case或if else语句,但没有其他想法
它应该只使用java实现

uajslkp6

uajslkp61#

由于只有3种类型的文档和3个存储库,最简单的方法可能是创建一个DocumentPersistenceService,在内部注入3个存储库。
然后,您可以使用简单的instance of检查来根据类型调用正确的存储库。
如果你想让它更具可伸缩性,比如说100个文档类型,你可以选择一个稍微复杂一点的配置,在这个配置中,你有一个从类到其相应存储库的Map
因此,在DocumentPersistenceService的构造函数中,您可以使用Spring ApplicationContext.getBean()方法按名称获取每个存储库(使用您的约定,对于ImageDocument,您将执行getBean("ImageDocumentRepository"),然后使用您获得的bean(假设它不是null)在您的map中添加从ImageDocument.class到您获得的ImageDocumentRepository引用的条目。
DocumentPersistenceService接收到要保存的文档时,它可以根据文档的类别从Map中查找相应的存储库。文档列表实际上可以通过配置提供,因此您不必硬编码任何内容,并且可以根据需要扩展到任意数量。

lmvvr0a8

lmvvr0a82#

一般来说,在控制器中没有任何逻辑是一个很好的做法。所以在这个任务中,我会创建一些DocumentService,其中有另外三个(将来你可以添加更多)存储库。在这个服务中,你可以选择你想要保存文档的存储库

相关问题