如何从 Spring 中的某些上下文中排除 bean?

How can I exclude beans from certain contexts in Spring?

我有一个混合了 Spring Batch 和 Spring Web 的项目。它主要是一个运行作业的 Spring 批处理项目,但我们在那里有一些 REST 端点,还有 Spring Batch Admin Manager 模块。我们的基础项目有自己的(主要)应用程序上下文,但我们包含在 POM 中的 Admin Manager 项目也有效地创建了自己的上下文。

我的一个 类 是 @RestController,这意味着它会自动被两个上下文实例化。这个控制器有几个 @Autowired 依赖项,这在第一个上下文运行时很好,因为它找到了所有这些依赖项。但是当第二个上下文运行时,它无法找到这些依赖项,因此应用程序无法正常启动。

但是因为第二个上下文是在幕后自动创建的,来自前面提到的 Sping Batch Admin Manager 项目,所以我无法真正控制它。有什么方法可以在我的 @RestController 中手动指定它应该从除我的主要上下文之外的所有上下文中排除吗?

您可以使用@Conditional 注释之一

例如@ConditionalOnClass@ConditionalOnMissingClass@ConditionalOnBean@ConditionalOnMissingBean

所以你的控制器只是检查是否有 classes/beans 是 运行 端点

所必需的

阅读更多here