簡體   English   中英

在Spring Map中延遲初始化bean

[英]Lazily initializing beans in a Spring Map

我試圖在Spring映射中延遲初始化bean,以便僅在通過map.get檢索它們時初始化內部的bean。 考慮以下代碼:

春季配置

<bean class="java.util.HashMap">
  <constructor-arg>
    <map>
      <entry key="foo">
        <bean class="Messager" lazy-init="true">
          <constructor-arg index="0" value="bar" />
        </bean>
      </entry>
    </map>
  </constructor-arg>
</bean>

測試類別

public class Messager {
    public Messager(String message) {
        System.out.println(String.format("Initialized %s", message));
    }
}

如果運行上面的代碼,則在應用程序啟動時將初始化映射中的Messager bean。 我如何推遲bean的初始化,直到檢索到映射項?

lazy-true只是將初始化推遲到其他bean(或在這種情況下發生的內部Spring基礎結構代碼)對這個spring bean的第一個引用之前。 這里,外部映射的初始化最多可以推遲,但是一旦初始化,通過構造函數傳遞的映射將被完全初始化。 Spring的MapFactoryBean支持map元素功能,並且看起來像它支持您想要的功能一樣,因為它可以一口氣初始化地圖中的值。 因此,AFAIK和Spring沒有開箱即用的支持-但是,您可以嘗試自己實施惰性地圖或使用commons-collection的 LazyMap 另外,您可能需要編寫FactoryBean才能使此類在Spring上下文中可用。

暫無
暫無

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

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