2

Spring Bean スキャンについて少し戸惑っています。

私の知る限り、私は置く必要があります<context:component-scan base-package="some.package" />

Spring は、指定されたパッケージのルートから Bean を検索します。

しかし、私のアプリケーションでは、.xml 構成ファイルからこの行を削除して Tomcat を起動すると、

INFO : org.springframework.beans.factory.support.DefaultListableBeanFactory - Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@4dd1b: defining beans

<context:component-scan base-package="some.package" />そして、Bean の長いリストを取得します。それらのいくつかは Spring からのものですが、構成ファイルに追加されていると予想されるものもあります。両方のログで唯一異なる点は、コントローラ メソッドのアドレスへのマッピングです。この行が存在しない場合、メソッドはマップされません。

Spring がこれらの Bean を検出するのはなぜですか? Spring がアノテーション付きクラスのパッケージをスキャンするのは何ですか?

関連する場合、私はSpring 3を使用しています

編集:削除しない<context:component-scan base-package="some.package" />と、シングルトンの事前インスタンス化に関する情報が2回取得されます。そのため、これらの Bean は 2 回スキャンされているようです。

編集:ContextListenerによってロードされたファイルの1つに、コンポーネントスキャンがあったようです。そのため、これらの Bean を 2 回リストしました。

4

3 に答える 3

0

config.xmlには、springがすべてのコードをスキャンしている場所が必要<context:component-scan base-package="se.eleon" />です。そこに何も入れないと、springmvcが予期していることは何も起こりません。これは、春がすべての注釈などを探している場所です

于 2012-08-07T20:15:40.810 に答える
0

同じパッケージをスキャンしている 2 つのディスパッチャ xml 構成ファイルがありますか? その場合、Bean の初期化が 2 回発生します。

この自動スキャン プロセスを実行する理由は、@Controller @Autowire などのアノテーションを識別するためです。それ以外の場合、これらのアノテーションは Spring IOC コンテナーにとって意味がありません。

于 2012-08-08T06:07:01.113 に答える
0

<context:annotation-config/>アプリケーション コンテキストに XMLもありますか? もしそうなら、Bean が .xml なしで初期化される理由を説明でき<context:component-scan .../>ます。

This SO post は、実際に2つの違いを説明しています。

于 2012-08-07T21:22:14.833 に答える