gpt4 book ai didi

java - OSGi 包从另一个包访问 Spring 上下文文件

转载 作者:行者123 更新时间:2023-11-29 10:06:25 26 4
gpt4 key购买 nike

我有一个作为多个 Spring 项目存在的现有应用程序。项目 A 的 Spring 上下文 XML 文件使用

导入 B 的 Spring 上下文 XML 文件
<import resource="classpath*:/META-INF/spring/BContext.xml" />

但是,我得到一个 FileNotFoundException。我假设这是由于项目 B 的 bundle 未公开资源这一事实造成的。我可以访问类,但不能访问文件。

在研究这个问题时,常见的评论是使用 OSGi 服务并注入(inject)服务,而不是尝试直接注入(inject) bean。但是,由于这是一个现有的应用程序,我想避免重新连接整个应用程序。

有没有办法告诉 OSGi 导出资源?我在 Karaf 上运行 ServiceMix。

最佳答案

它只是一个类路径资源,所以我假设添加一个适当的 Export-Package指令就可以了。不过,这绝对不是正确的做法。该上下文文件的路径表明,也许包含 BContext.xml 的项目已经设置为使用 Spring 动态模块。如果是这样,那么当您启动该包时,Spring ApplicationContext 将作为服务导出。在您的 OSGi 控制台中查找它。

编辑:回应评论中的讨论:

我自己从未尝试过,但理论上应该可以使用 Spring DM 的 osgi namespace制作bean reference to the OSGi service这是项目 B 的 ApplicationContext。然后,拥有一个作为 ApplicationContext 的 bean,您可以使用 normal Spring configuration使用 one 从中提取 bean of the getBean()方法。请注意,您可以使用 <constructor-arg ... />在 Spring 配置中为工厂方法指定参数,如图所示 toward the bottom of this examples section .

关于java - OSGi 包从另一个包访问 Spring 上下文文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6749334/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com