我已經從現有的遺留戰爭中創建了一個osgi包。該應用程序有一個實現Spring接口ApplicationContextAware的類,然後使用上下文以編程方式獲取bean(不知道爲什麼,但最終需要重構)。該應用程序現在使用OsgiBundleXmlApplicationContext,但我認爲使用此問題存在一個問題,即setApplicationContext方法在實現ApplicationContextAware的任何類中都未調用,所以現在此類中的上下文始終爲null。從BundleContextAware類訪問應用程序上下文
因此,作爲一種解決方法,我已經實現了BundleContextAware,以便我可以獲取對發佈的上下文的引用並以這種方式訪問這些bean。這很好,但是上下文中唯一的bean是warDeployer(應該提到我使用spring dm bundle spring-extender來部署war)。上下文中的bundle是我的bundle,所以我不明白爲什麼我得到的上下文沒有我的bean。我必須讓應用程序上下文的代碼是:
ServiceReference ref = bundleContext.getServiceReference(ApplicationContext.class.getName()); applicationContext = (OsgiBundleXmlApplicationContext) bundleContext.getService(ref);
我可以在我的很多方面都花在創建,所以我不明白爲什麼他們不在我收到的背景下日誌中看到。
任何人都可以建議有什麼不對?我明白這種方法有點不合理,但在現有代碼重構之前它是暫時的。
在此先感謝。
巴里
嗨,謝謝你的回覆。我認爲這可能是一個錯誤,因爲我沒有看到任何文件表明這不應該工作。今年3月有一個jira登錄(https://jira.springframework.org/browse/OSGI-804),但沒有任何反應。我已經通過使用BeanFactoryAware接口來解決問題,它可以正常工作。謝謝 – 2010-12-03 10:42:27