5

春の構成のコンテキストで**が何を表しているのか誰かが説明できますか?

<context:component-scan base-package="a.b.**" />

そして、それはどのように異なりますか

<context:component-scan base-package="a.b" />

component-scan 要素の base-package 属性でのワイルドカード/ant スタイル パスの使用については何も見つかりませんでした。

component-scanning 属性でのワイルドカードの使用について説明しているドキュメント/ソース コードを教えてください。私のgoogle-fuは役に立たない

編集: 受け入れられた回答に基づいてさらにいくつかの実験を行いました.base-package属性の値がリソース文字列に「変換」される方法を知っているので、すべてが理にかなっています.

そこで、2 つの Spring 管理コンポーネントを作成しました。

a.b.SpringBean2
a.b.c.d.SpringBean1

SpringBean1 には @Autowired を使用して SpringBean2 が注入されています

これだけではありません:

<context:component-scan base-package="a.b"/>

この:

<context:component-scan base-package="a.b.**"/>

SpringBean2 を正しく解決して SpringBean1 に注入できるという意味では問題なく動作しますが、これらも動作します。

<context:component-scan base-package="a.b.**.**.**"/> <!-- as many .** as you want-->
<context:component-scan base-package="a.b**"/>
<context:component-scan base-package="a.b*"/>

ただし、未解決の SpringBean2 タイプのため、これは NoSuchBeanDefinitionException で失敗します。

<context:component-scan base-package="a.b.*"/>
4

2 に答える 2

11

どちらも同じ意味で、最終的には次のようなベースパッケージ名a.bがこの種のリソース名でリソースルックアップに変換されclasspath*:/a/b/**/*.classます。最初のベースパッケージ名はこのリソースタイプになりますclasspath*:/a/b/**/**/*.class。どちらも同じことを行うことになります。 abパッケージ名ですべてのクラスファイルを取得します。

于 2012-08-31T13:47:48.220 に答える
6

何をスキャンして含める/除外するかを定義するより強力な方法は、Spring フレームワークのリファレンス ドキュメントに記載されています。たとえば、これを行うことができます:

<context:component-scan base-package="org.example">
    <context:include-filter type="regex" expression=".*Stub.*Repository"/>
    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
</context:component-scan>

spring 3.0 ref docs のセクション 3.10.3 を参照してください。

次のこともできます。

<context:component-scan base-package="org.*.example"/>
于 2012-08-31T14:50:25.823 に答える