懒惰地在Spring Map中初始化bean

时间:2016-07-24 03:44:23

标签: java spring

我试图在Spring地图中懒惰地初始化bean,这样只有在通过map.get检索bean时才会初始化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初始化?

1 个答案:

答案 0 :(得分:0)

lazy-true只是将初始化推迟到这个spring bean的第一个引用来自其他bean(或者在这种情况下发生的内部Spring基础结构代码)。 这里最初可以延迟外部映射的初始化,但是一旦初始化,通过构造函数传递的映射将被完全初始化。 Spring的MapFactoryBean支持map元素功能,并且看起来它不支持您想要的功能,因为它一次性初始化地图中的值。所以 AFAIK,Spring没有开箱即用的支持 - 但是你可以尝试自己的懒惰地图,或使用LazyMapcommons-collection。 此外,您可能需要编写FactoryBean以使此类在Spring上下文中可用。