我有SimpleObject
班
public class SimpleObject
{
public SimpleObject()
{
Console.WriteLine("Instantiated");
}
}
和一个简单的Spring配置:
<object id="simpleObject" type="SpringTest.SimpleObject, SpringTest" />
当我解析配置以获取上下文以便将其传递给我的对象工厂时:
_context = (IApplicationContext)ConfigurationManager.GetSection("spring/context");
我意识到我的SimpleObject
已经过实例化。这对我来说听起来像是一种奇怪的行为。这是正常的 ?我怎么能避免这种情况?我只希望在明确要求_context
创建一个对象时创建我的对象。
答案 0 :(得分:1)
好的,我很蠢,
这只是
<object id="simpleObject" type="SpringTest.SimpleObject, SpringTest" lazy-init="true" />
答案 1 :(得分:0)
我看到你发现了一个适合你的配置......但这里是你问题中“为什么”部分的答案。
默认情况下,对象具有单例范围。 Spring在构造容器时实例化单例。根据{{3}},这样做是为了尽早检测配置问题,即在集装箱建造时间。
您可以通过指定lazy-init="true"
来覆盖对象定义中的此默认行为。然后,当首次在容器上请求时,或者首次需要构造另一个对象时,将创建单例。
请注意,您也可以使用...
<objects default-lazy-init="true">
<!-- no objects will be pre-instantiated... -->
</objects>
...让容器中所有对象的延迟初始化默认为true。