簡體   English   中英

Spring - 所有bean都被處理了嗎?

[英]Spring - Do all beans get processed?

我有一個我正在編寫的LDAP應用程序的beans.xml文件。 我允許用戶選擇幾個LdapContextSource。 對於每一個我有一個不同的豆,例如

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

您可以看到只有一個上下文源bean被實例化,因為ldapTemplate bean只引用了一個。 但是,當我運行我的應用程序時,stdout中的Spring日志消息提供了有關每個上下文源的信息,即使只依賴於其中一個。

2011年1月25日上午11:56:36 org.springframework.ldap.core.support.AbstractContextSource afterPropertiesSet INFO:未設置屬性'userDn' - 匿名上下文將用於讀寫操作Jan 25,2011 11:56:37 AM org.springframework.ldap.core.support.AbstractContextSource afterPropertiesSet INFO:未設置屬性'userDn' - 匿名上下文將用於讀寫操作2011年1月25日上午11:56:37 org.springframework.ldap.core。 support.AbstractContextSource afterPropertiesSet INFO:未設置屬性'userDn' - 匿名上下文將用於讀寫操作

我的問題是:

(1)Spring使用未引用/依賴的上下文源做什么? 它們永遠不應該在我的應用程序中實例化,它讓我擔心Spring正在為每個bean提供日志信息。

(2)我應該注釋掉應用程序中未使用的上下文源bean嗎? 讓他們沒有注釋會有什么后果? 什么是標准做法?

謝謝,
KTM

也許你可以查看Lazy Loading of Beans 以下是Spring 2.5.x文檔中的相關說明......

ApplicationContext實現的默認行為是在啟動時急切地預先實例化所有單例bean。 預實例化意味着ApplicationContext將急切地創建和配置其所有單例bean作為其初始化過程的一部分。 通常這是一件好事,因為這意味着將立即發現配置或周​​圍環境中的任何錯誤(而不是可能是幾小時甚至幾天)。

但是,有時候這種行為不是想要的。 如果您不希望在使用ApplicationContext時預先實例化單例bean,則可以通過將bean定義標記為延遲初始化來有選擇地控制它 一個延遲初始化的bean向IoC容器指示是否應該在啟動時或首次請求時創建bean實例。

為了完整起見,這里有一個例子......

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM