【发布时间】:2019-05-26 11:05:36
【问题描述】:
假设我们有一个 Spring bean:
@Component
class PluginsProviderImpl implements PluginsProvider {
private final List<PluginInterface> plugins;
public PluginsProviderImpl(List<PluginInterface> plugins){
this.plugins = plugins;
}
//...
}
PluginInterface 的实现与核心系统具有运行时依赖关系,并由外部提供。有时,它们中的一些可能是错误的(例如,它们的依赖项丢失了)。如果在 Spring 上下文初始化时出现这样的错误 - 整个应用程序不会启动(即使损坏的插件也不需要其正常操作)。
是否可以控制 Spring 上下文加载,如果在 PluginInterface 实现之一中发生错误,则跳过它并继续初始化?
更新:更多解释:我不需要有条件地添加 bean。我想跳过一个错误的 bean,并且问题出现在上下文初始化期间。这是一个插件 - 在运行时提供。
更多解释: 即使插件引入的 PluginInterface 实现之一无法初始化,我也想启动应用程序。
【问题讨论】:
-
@RolandWeisleder I 不需要有条件地添加 bean。我想跳过一个错误的 bean,它在上下文初始化期间是已知的。这是插件 - 在运行时提供。
-
'他们的依赖项丢失'这是唯一的问题吗?如果不能,你能解释更多你想要达到的目标吗?
-
@slimane 一般来说,即使插件引入的 PluginInterface 实现之一无法初始化,我也想启动应用程序。
-
@piradian 那些 PluginInterface 是如何传递给应用程序的?它们是弹簧管理的 Beans 吗?
标签: java spring spring-boot plugin-architecture