微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当您将特定的 spring bean 返回给其余端点的任何使用者时会发生什么

如何解决当您将特定的 spring bean 返回给其余端点的任何使用者时会发生什么

我有一个包含多个 Spring Boot 模块的项目。我们的数据层不是 CRUD 和模型对象查找器的更简单、更典型的情况,并且与我们的数据交互的服务需要更多的元数据配置和知识。如果我有一个模块整合了对其他几个模块很重要的配置,并且如果我将这些实例注册为 spring bean,如果我将它们从 rest 端点返回给消费者会发生什么?例如,假设这些对象之一是自定义 MongoRepository 实现。返回的实例会起作用吗?如果两个模块调用端点来请求实例,当它们在使用者模块中反序列化时,实例是否可以正常工作?如果使用者与托管其余端点的服务位于不同的 JVM 上,是否有区别?

当我们考虑模型对象由休息控制器发送并由消费者接收时会发生什么时,我不确定答案是否像看起来那么简单。存储库包括数据库的已建立连接,该连接可能是也可能不是 SSL。对于身份验证和授权之类的事情,这种方法似乎不可行,但我想我会问这个问题以确保我真的理解这一点。我正在权衡这种方法与将此模块创建为一个库 (jar),我可以将其包含在需要此配置的模块中。不过,我怀疑我只能使用 jar/library 方法来做到这一点。

解决方法

您不应该通过您的(Rest)端点将基础设施 bean(如存储库、服务、数据源等)公开为资源。那只会导致(奇怪的)问题。

例如,如果您要公开您的 MongoRepository 并且它会被序列化(通过 java Serialization),为什么它应该在我的计算机上工作?我没有与 MongoDB 的连接,我什至可能没有它,我什至可能不在乎。想象一下将 JpaRepository 连接到您的企业级数据库服务器(如 Oracle 或 DB2)的情况。我绝对不会有那个,也不会有所有的架构和数据。

因此,根据经验,不要通过(其余)端点公开这些服务。

您的(其余)端点应该只公开模型,而不是与基础设施(或应用程序)相关的 bean。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。