2011-01-25 4 views
2

У меня есть файл beans.xml для приложения LDAP, которое я пишу. Я разрешаю пользователю выбирать несколько LdapContextSource (s). Для каждого из них у меня есть другой компонент, например.Весна - все бобы обрабатываются?

<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 бобе. Тем не менее, когда я запускаю свое приложение, мои сообщения журнала Spring в stdout предоставляют информацию о каждом источнике контекста, хотя зависит только от одного.

25 января 2011 11:56:36 AM org.springframework.ldap.core.support.AbstractContextSource afterPropertiesSet INFO: Свойство 'userDn' не установлен - анонимный контекст будет использоваться для операций чтения-записи Jan 25, 2011 11:56:37 org.springframework.ldap.core.support.AbstractContextSource afterPropertiesSet INFO: свойство 'userDn' не установлено - анонимный контекст будет использоваться для операций чтения и записи 25 января 2011 г. 11:56: 37 AM org.springframework.ldap.core.support.AbstractContextSource afterPropertiesSet INFO: свойство 'userDn' не установлено. Анонимный контекст будет использоваться для операций чтения и записи.

Моих вопросов:

(1) Что такое весна делает с источниками контекста, не отнесенные к/зависят от? Они никогда не должны создаваться в моем приложении, и меня беспокоит, что Spring предоставляет информацию журнала для каждого из этих компонентов.

(2) Должен ли я комментировать компоненты источника контекста, которые не используются в приложении? Каковы последствия того, чтобы оставить их без учета? Какова стандартная практика?

Спасибо,
KTM

ответ

9

Может быть, вы могли бы проверить Lazy Loading of Beans. Вот соответствующее объяснение от Spring 2.5.x документов ...

поведением по умолчанию для реализаций ApplicationContext является жадно предварительно Instantiate всех одноэлементных бобов при запуске. Предварительная реализация означает, что приложение ApplicationContext с готовностью создаст и сконфигурирует все его одноэлементные бобы как часть процесса инициализации . Вообще это хорошая вещь, потому что это означает, что любые ошибки в конфигурации или в окружающей среде будет обнаружены сразу (в отличие от , возможно, несколько часов или даже дней вниз по линии).

Тем не менее, бывают случаи, когда поведение не является тем, что требуется. Если вы не хочет одноэлементно фасоли быть предварительно инстанцировано при использовании ApplicationContext, вы можете избирательно управлять этим путем маркировки определению боба ленивой инициализировано. A lazily-initialized bean указывает на контейнер IoC, должен ли быть создан экземпляр bean-объекта при запуске или при первом запросе.

Ради Комплектность здесь пример ...

<bean id="contextSource1" class="xxx.LdapContextSource" lazy-init="true"/> 
+0

Спасибо! ххххххх – ktm5124

Смежные вопросы