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