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 回リストしました。