我正在与PF4J(插件框架为Java)的开发人员合作,为Wicket提供更好的插件功能。已经有了一个pf4j-spring和一个pf4j-wicket项目来提供一些基本的集成。为了允许@SpringBean或@Inject注释能够访问子上下文中的插件bean,我们需要能够查找与特定类关联的ApplicationContext。
例如,假设我在子插件( plugin ) ApplicationContext中有一个ApplicationContext bean,该插件还通过@SpringBean注释提供了一个面板。Spring不允许父ApplicationContext在子上下文中看到bean,这是有原因的。因此,我们将得到一个异常,即不能找到bean,因为@SpringBean只在父上下文中查找bean。我们开发的代码可以查找子上下文,如下所示:
SpringPlugin plugin = (SpringPlugin)PluginManager.whichPlugin(MyService.class);
ApplicationContext pluginContext = plugin.getApplicationContext();如何在自定义SpringComponentInjector版本中修改或提供此功能?它使用ISpringContextLocator,但是上下文定位器没有指定它需要ApplicationContext的类。
对于如何实现这一点,有什么想法吗?
谢谢你的帮忙!
发布于 2016-02-25 09:50:23
恐怕目前的SpringComponentInjector还没有准备好这样的使用。您将不得不创建您自己的版本。
我看到的问题是,您必须拥有与插件一样多的IComponentInstantiationListeners。或者创建一个复合ICIL,为每个插件委托给SpringBeanLocators。我觉得复合材料会更好。然后,您必须确保pluginA中的面板不能使用由SpringBeanLocatorB定位的bean。
如果你设法做到这一点,并且你在wicket-spring中找到了一些可以使你的版本变得更简单的通用的东西,那么请告诉我们,我们会考虑你的建议!
发布于 2019-12-11 12:40:34
看看sbp。它构建在pf4j之上,支持Spring,并提供了在主应用程序和插件之间共享bean的机制。看上去:
@Override
protected SpringBootstrap createSpringBootstrap() {
return new SharedDataSourceSpringBootstrap(this, MdSimplePluginStarter.class)
.addSharedBeanName("objectMapper")
.addSharedBeanName("cacheService");
}https://stackoverflow.com/questions/35608610
复制相似问题