私は既存のレガシー戦争からosgiバンドルを作成しました。このアプリには、SpringインターフェイスApplicationContextAwareを実装するクラスがあり、コンテキストを使用してプログラムでBeanを取得します(理由はわかりませんが、最終的にはリファクタリングが必要です)。アプリは現在OsgiBundleXmlApplicationContextを使用していますが、これを使用すると、ApplicationContextAwareを実装するクラスでsetApplicationContextメソッドが呼び出されないという問題があるため、このクラスのコンテキストは常にnullになります。
そのため、回避策としてBundleContextAwareを実装し、公開されたコンテキストへの参照を取得して、その方法でBeanにアクセスできるようにしました。これは問題なく機能しますが、コンテキスト上の唯一のBeanはwarDeployerです(戦争を展開するためにspring dmバンドルspring-extenderを使用していることに言及する必要があります)。コンテキストに存在するバンドルは私のバンドルであるため、取得しているコンテキストにBeanが含まれていない理由がわかりません。アプリケーションコンテキストを取得する必要があるコードは次のとおりです。
ServiceReference ref = bundleContext.getServiceReference(ApplicationContext.class.getName());
applicationContext = (OsgiBundleXmlApplicationContext) bundleContext.getService(ref);
ログを見ると、コンテキストの多くが作成されていることがわかります。そのため、取得しているコンテキストにコンテキストがない理由がわかりません。
誰かが何が悪いのかアドバイスできますか?このアプローチは少しハッキーだと理解していますが、既存のコードがリファクタリングされるまでは一時的なものです。
前もって感謝します。
バリー