在子上下文中覆盖父上下文中定义的 bean

发布于 2024-10-03 16:29:45 字数 99 浏览 7 评论 0原文

我们的应用程序需要支持多租户。每个登上的客户都可能会覆盖 1 个或多个 bean 或在核心平台级别定义的 bean 的某些属性(公共代码/定义)。我想知道处理这个问题的最佳方法是什么。

Our app has a requirement to support multi-tenancy. Each of the boarded customer might potentially override 1 or more beans or some properties of a bean defined at the core platform level (common code/definitions). I am wondering what is the best way to handle this.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

冷︶言冷语的世界 2024-10-10 16:29:45

Spring 允许您多次重新定义相同的 bean 名称,并将为给定名称处理的最后一个 bean 定义作为获胜的定义。例如,您可以有一个定义核心 bean 的 XML 文件,并将其导入到特定于客户端的 XML 文件中,该文件还重新定义了其中一些 bean。不过,它有点脆弱,因为没有机制专门说明“这个 bean 定义是一个覆盖”。

我发现处理这个问题的最干净的方法是使用 Spring 3 中引入的新 @Bean-语法。您不是用 XML 来定义 bean,而是用 Java 来定义它们。因此,您的核心 bean 将在一个带有 @Bean 注解的类中定义,并且您的客户端配置将对其进行子类化,并覆盖相应的 bean。这允许您使用标准 java @Override 注释,明确指示给定的 bean 定义正在被覆盖。

Spring allows you to redefine the same bean name multiple times, and takes the last bean definition processed for a given name to be the one that wins. So for example, your could have an XML file defining your core beans, and import that in a client-specific XML file, which also redefines some of those beans. It's a bit fragile, though, since there's no mechanism to specifically say "this bean definition is an override".

I've found that the cleanest way to handle this is using the new @Bean-syntax introduced in Spring 3. Rather than defining beans as XML, you define them in Java. So your core beans would be defined in one @Bean-annotated class, and your client configs would subclass that, and override the appropriate beans. This allows you to use standard java @Override annotations, explicitly indicating that a given bean definition is being overridden.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文