我从现有的遗留战争中创建了一个 osgi 包。该应用程序有一个实现spring接口ApplicationContextAware的类,然后它使用上下文以编程方式获取bean(不知道为什么,但这最终需要重构)。该应用程序现在使用 OsgiBundleXmlApplicationContext,但我认为使用它存在问题,即 setApplicationContext 方法不会在任何实现 ApplicationContextAware 的类中被调用,因此现在此类中的上下文始终为空。
因此,作为一种解决方法,我实现了 BundleContextAware 以便我可以获得对已发布上下文的引用并以这种方式访问 bean。这可以正常工作,但是上下文中唯一的 bean 是 warDeployer(应该提到我正在使用 spring dm bundle spring-extender 来部署战争)。上下文中存在的包是我的包,所以我看不出为什么我得到的上下文中没有我的 bean。我必须获取应用程序上下文的代码是:
ServiceReference ref = bundleContext.getServiceReference(ApplicationContext.class.getName());
applicationContext = (OsgiBundleXmlApplicationContext) bundleContext.getService(ref);
我可以在日志中看到我的大部分上下文都在创建,所以我看不出为什么它们不在我得到的上下文中。
任何人都可以建议什么是错的?我知道这种方法有点老套,但在重构现有代码之前它是暂时的。
提前致谢。
巴里