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

<import resource="classpath*:/META-INF/spring/BContext.xml" />


但是,我得到一个FileNotFoundException。我认为这是由于项目B的捆绑包未公开该资源引起的。我可以访问类,但不能访问文件。

研究此问题时,通常的意见是使用OSGi服务并注入服务,而不是尝试直接注入bean。但是,由于这是一个现有应用程序,因此我想避免重新连接整个内容。

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

最佳答案

它只是类路径资源,因此我假设添加适当的Export-Package指令即可解决问题。但是,那绝对不是正确的方法。该上下文文件的路径表明,也许已经将包含BContext.xml的项目设置为可与Spring Dynamic Modules一起使用。如果是这样,那么当您启动该捆绑包时,Spring ApplicationContext将作为服务导出。在OSGi控制台中查找。

编辑:针对评论中的讨论:

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

07-25 22:40
查看更多