为什么Spring.Net在解析配置时实例化对象?

时间:2011-10-19 11:49:23

标签: spring.net

我有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创建一个对象时创建我的对象。

2 个答案:

答案 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。