Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @SpringBean支持子ApplicationContext中的bean_Java_Spring_Wicket_Pf4j - Fatal编程技术网

Java @SpringBean支持子ApplicationContext中的bean

Java @SpringBean支持子ApplicationContext中的bean,java,spring,wicket,pf4j,Java,Spring,Wicket,Pf4j,我正在与的开发人员合作,为Wicket提供更好的插件功能。已经有一个pf4j spring和一个pf4j wicket项目来提供一些基本的集成。为了允许@SpringBean或@Inject注释在子上下文中访问插件bean,我们需要能够查找与特定类关联的ApplicationContext 例如,假设我在一个子(插件)ApplicationContext中有一个MyService bean,该插件还提供了一个面板,该面板需要通过@SpringBean注释来实现。Spring不允许父应用程序上下文

我正在与的开发人员合作,为Wicket提供更好的插件功能。已经有一个pf4j spring和一个pf4j wicket项目来提供一些基本的集成。为了允许@SpringBean或@Inject注释在子上下文中访问插件bean,我们需要能够查找与特定类关联的ApplicationContext

例如,假设我在一个子(插件)ApplicationContext中有一个MyService bean,该插件还提供了一个面板,该面板需要通过@SpringBean注释来实现。Spring不允许父应用程序上下文在子上下文中查看bean,这是有充分理由的。因此,我们会得到一个异常,即无法找到bean,因为@SpringBean只在父上下文中查找bean。我们开发了一些代码,可以像这样查找子上下文:

SpringPlugin plugin = (SpringPlugin)PluginManager.whichPlugin(MyService.class);
ApplicationContext pluginContext = plugin.getApplicationContext();
如何在SpringComponentInjector的自定义版本中修改或提供此功能?它使用ISpringContextLocator,但该上下文定位器未指定需要ApplicationContext的类

关于如何实现这一点有什么想法吗


谢谢你的帮助

恐怕current
SpringComponentInjector
不适合这种使用。您必须创建自己的版本

我看到的问题是,您必须拥有与插件数量相同的IComponentInstanceListener。或者创建一个复合ICIL,将每个插件委托给SpringBeanLocator。我认为复合材料会更好。然后,您必须确保pluginA中的面板不能使用springbeanlotorb定位的bean


<>如果你设法做到这一点,你在WikEt Spring中找到一些可以使你的版本更简单的东西,那么请让我们知道,我们会考虑你的建议!p> 恐怕current
SpringComponentInjector
不适合这种使用。您必须创建自己的版本

我看到的问题是,您必须拥有与插件数量相同的IComponentInstanceListener。或者创建一个复合ICIL,将每个插件委托给SpringBeanLocator。我认为复合材料会更好。然后,您必须确保pluginA中的面板不能使用springbeanlotorb定位的bean

<>如果你设法做到这一点,你在WikEt Spring中找到一些可以使你的版本更简单的东西,那么请让我们知道,我们会考虑你的建议!p> 看一看。它构建在pf4j之上,支持Spring引导,还提供了在主应用程序和插件之间共享bean的机制。它看起来像:

    @Override
    protected SpringBootstrap createSpringBootstrap() {
        return new SharedDataSourceSpringBootstrap(this, MdSimplePluginStarter.class)
            .addSharedBeanName("objectMapper")
            .addSharedBeanName("cacheService");
    }
看一看。它构建在pf4j之上,支持Spring引导,还提供了在主应用程序和插件之间共享bean的机制。它看起来像:

    @Override
    protected SpringBootstrap createSpringBootstrap() {
        return new SharedDataSourceSpringBootstrap(this, MdSimplePluginStarter.class)
            .addSharedBeanName("objectMapper")
            .addSharedBeanName("cacheService");
    }

谢谢martin-g。这与我采取的方法非常相似。我创建了一个ICIL,它基本上基于组件的类加载器路由请求。我确实制作了自己的wicket spring项目自定义版本,并修改了ISpringContextLocator.getApplicationContext以获取bean的类参数。幸运的是,无论在哪里,这都是可用的。我还在试验。如果我们有进展,我会告诉你的。谢谢你的回答。谢谢martin-g。这与我采取的方法非常相似。我创建了一个ICIL,它基本上基于组件的类加载器路由请求。我确实制作了自己的wicket spring项目自定义版本,并修改了ISpringContextLocator.getApplicationContext以获取bean的类参数。幸运的是,无论在哪里,这都是可用的。我还在试验。如果我们有进展,我会告诉你的。谢谢你的回答。