Spring-Context MANIFEST definitionsを使用して、component-scan
を実行して、Spring注釈付きBeanのパッケージを検索しようとしています。私のSpringのXML設定は次のようになります。OSGiのSpringコンポーネントスキャンで何も見つからない
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">
<!-- Scans the classpath of this application for @Components to deploy as
beans -->
<context:component-scan
base-package="com.some.other.module.one,com.another.module.two" />
<context:annotation-config />
....
</beans>
MANIFESTでは、クラスを含むパッケージをSpringアノテーションでインポートします。しかし、ApplicationContextを調べると、その中に注釈付きBeanはありません。
私たちがスキャンしているクラスパスが異なるバンドルにあるので、これが起こっていると思います。これらのバンドルは、Springアノテーションを持つクラスを持つパッケージを直接インポートすることはありません。混乱しているのは、Springがコンポーネントスキャンが開始されたメインバンドルのクラスパスを取得しない理由です。クラスパススキャンを実行しているときに、各バンドルのクラスパスを使用しているかのようです。スキャンが始まるクラスパスのクラスパスをクラスパススキャンで使用する方法はありますか?
編集
Danail Nachevは周りの仕事を使用することです春はクラスパスのスキャンを行うとき、それが唯一のクラスパスがで起こっているモジュール内で起こる、以下の言ったように:
- 。モジュールごとの設定をSpring 3
@Configuration
beanに入れてください。 @Configuration
beanを初期化するXMLファイルを最上位バンドルに使用します。- 最上位レベル
@Configuration
では@Import
を使用して他の構成ファイルをインポートします。 - MANIFESTの
Require-Bundle
に、インポートする設定が使用可能であることを確認してください。
はそれが正確に観察された行動だ、ありがとう。クラスパススキャンを使用せずに回避策を見つけることができました。 –