XML Bean定義を使用して構成する必要がある外部ライブラリを使用しています。 Bean定義で、プロジェクトのBeanを外部クラスに提供する必要があります。コンポーネントスキャンでSpringアノテーションを使用しています。
XML Bean定義内で注釈付きBeanを参照するにはどうすればよいですか?
XML Bean定義を作成する代替手段はありますか?
詳細: Spring 3.0.7
(XMLまたはアノテーションメタデータに基づいて)作成方法に関係なく、すべてのBeanは一意の名前でアプリケーションコンテキストに含まれます。
名前を指定せずに@Component
または派生クラスでクラスに注釈を付けた場合、デフォルトの名前付けスキームが適用され、Bean名は最初の文字が小文字のクラス名になります:ClassName => "className"
。
そのことを念頭に置いて、XML Bean定義にそのBeanを注入する必要がある場合は、コンテキスト内の他のBeanと同じように実行します。
<bean id="someBean" class="SomeClass">
<property name="someProp" ref="className"/><!-- to stick to the above example -->
</bean>
注釈とXMLを混在させているため、アプリケーションコンテキストは「className」Beanを適切に見つけることができます。
@Serviceアノテーションは、Beanに任意の名前を付けるために使用できるオプションのString値を取ります。たとえば、カスタムBeanが次のようになっているとします。
@Service("mySpecialName")
public class MyClass { ... }
次に、あなたのxmlは次のようになります:
<bean class="com.someone.else.library.SomeClass">
<property name="someProp" ref="mySpecialName"/>
</bean>
以下のコードをxmlファイルに追加してください
<context:component-scan base-package="" />
<context:annotation-config />