2

作成しているLDAPアプリケーション用のbeans.xmlファイルがあります。ユーザーが複数のLdapContextSourceを選択できるようにしています。それぞれに異なるBeanがあります。

<bean id="ldapTemplate" class="yyy.LdapTemplate">
      <constructor-arg ref="contextSource1" />
</bean>
<bean id="contextSource1" class="xxx.LdapContextSource">
      ...
</bean>
<bean id="contextSource2" class="xxx.LdapContextSource">
      ...
</bean>
<bean id="contextSource3" class="xxx.LdapContextSource">
      ...
</bean>

ldapTemplate Beanによって参照されるのは1つだけであるため、これらのコンテキストソースBeanの1つだけがインスタンス化されることがわかります。ただし、アプリケーションを実行すると、stdoutのSpringログメッセージは、1つだけに依存している場合でも、各コンテキストソースに関する情報を提供します。

2011年1月25日11:56:36AMorg.springframework.ldap.core.support.AbstractContextSource afterPropertiesSet情報:プロパティ'userDn'が設定されていません-匿名コンテキストが読み取り/書き込み操作に使用されます2011年1月25日11:56:37 AM org.springframework.ldap.core.support.AbstractContextSource afterPropertiesSet INFO:プロパティ'userDn'が設定されていません-匿名コンテキストが読み取り/書き込み操作に使用されます2011年1月25日11:56:37AMorg.springframework.ldap.core。 support.AbstractContextSource afterPropertiesSet INFO:プロパティ'userDn'が設定されていません-匿名コンテキストが読み取り/書き込み操作に使用されます

私の質問は次のとおりです。

(1)参照されていない/依存されていないコンテキストソースでSpringは何をしていますか?これらは私のアプリケーションでインスタンス化されるべきではなく、Springがこれらの各Beanのログ情報を提供しているのではないかと心配しています。

(2)アプリケーションで使用されていないコンテキストソースBeanをコメントアウトする必要がありますか?コメントを付けないでおくとどうなりますか?標準的な方法は何ですか?

ありがとう、
ktm

4

1 に答える 1

9

Lazy Loading of Beansをチェックしてみてください。これは、Spring 2.5.x ドキュメントからの関連する説明です...

ApplicationContext 実装のデフォルトの動作は、起動時にすべてのシングルトン Bean を熱心に事前インスタンス化することです。事前インスタンス化とは、ApplicationContext が初期化プロセスの一部としてすべてのシングルトン Bean を積極的に作成および構成することを意味します。通常、これは良いことです。なぜなら、構成または周囲の環境のエラーがすぐに発見されることを意味するからです (数時間または数日後に発生する可能性があるのとは対照的に)。

ただし、この動作が望ましくない場合もあります。ApplicationContext の使用時にシングルトン Bean を事前にインスタンス化したくない場合は、Bean 定義を lazy-initialized としてマークすることで、これを選択的に制御できます。遅延初期化された Bean は、起動時または最初に要求されたときに Bean インスタンスを作成する必要があるかどうかを IoC コンテナーに示します。

完全を期すために、ここに例を示します...

<bean id="contextSource1" class="xxx.LdapContextSource" lazy-init="true"/>
于 2011-01-25T18:11:52.757 に答える