Frage

Ich habe eine Bean.xml -Datei für eine LDAP -Anwendung, die ich schreibe. Ich erlaube dem Benutzer die Auswahl mehrerer LDAPContextSource (en). Für jeden habe ich eine andere Bohne, z. B.

<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>

Sie können sehen, dass nur eine dieser Kontextquellen -Bohnen instanziiert wird, da nur einer von der Ldaptemplate -Bohne bezeichnet wird. Wenn ich jedoch meine Anwendung ausführe, liefern meine Spring -Protokollnachrichten in STDOut Informationen zu jeder Kontextquelle, obwohl nur eines davon abhängt.

25. Januar 2011 11:56:36 Uhr org.springframework.ldap.core.support.abstractContextSource AfterpropertieStet Info: Eigenschaft 'Userdn' Not Set - Anonymous Kontext wird für Lese-schreiber Operationen verwendet, 25. Januar 2011 11:56:37 AM org.springframework.ldap.core.support.abstractContextSource AfterPertieStieSet Info: Eigenschaft 'UserDn' Nicht gesetzt - Anonymer Kontext wird für den 25. Januar, Januar 2011, 11:56:37 Uhr org.springframework.ldap.core verwendet. Support.abstractContextSource AfterPropertieStieSet Info: Eigenschaft 'Userdn' Nicht gesetzt - Der anonyme Kontext wird für Lese-schreiberoperationen verwendet

Meine Fragen sind:

(1) Was macht Frühling mit den Kontextquellen, auf die nicht erwähnt / abhängig sind? Sie sollten in meiner Anwendung niemals instanziiert werden und beunruhigt mich, dass der Frühling für jede dieser Bohnen Protokollinformationen bereitstellt.

(2) Sollte ich die Kontextquellenbohnen kommentieren, die in der Anwendung nicht verwendet werden? Was sind die Konsequenzen, wenn sie sich nicht intensivieren lassen? Was ist die Standardpraxis?

Vielen Dank,
KTM

War es hilfreich?

Lösung

Vielleicht könnten Sie sich auschecken Fauler Laden von Bohnen. Hier ist die relevante Erklärung aus der Spring 2.5.x docs ...

Das Standardverhalten für ApplicationContext-Implementierungen besteht darin, alle Singleton-Bohnen beim Start-up eifrig zu präsentieren. Vorinstantiation bedeutet, dass ein ApplicationContext alle seine Singleton-Bohnen im Rahmen seines Initialisierungsprozesses eifrig erstellt und konfigurieren wird. Im Allgemeinen ist dies eine gute Sache, da dies bedeutet, dass alle Fehler in der Konfiguration oder in der Umgebung sofort entdeckt werden (im Gegensatz zu möglicherweise Stunden oder sogar Tagen unten).

Es gibt jedoch Zeiten, in denen dieses Verhalten nicht das ist, was gewünscht wird. Wenn Sie nicht möchten, dass eine Singleton-Bean bei Verwendung eines ApplicationContext vorinstantiert wird, können Sie dies selektiv steuern, indem Sie eine Bean-Definition als faul initialisiert markieren. Eine faul initialisierte Bohne zeigt dem IOC-Container an, ob eine Bean-Instanz beim Start erstellt werden sollte oder wann er zum ersten Mal angefordert wird.

Aus Gründen der Fertigstellung ist hier ein Beispiel ...

<bean id="contextSource1" class="xxx.LdapContextSource" lazy-init="true"/>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top