在默认情况下,程序一开始就会把配置文件中的所有对象都进行实例化。
为了验证这一点,我们可以只在Main方法里只写获取上下文,不写GetObject。
static void Main(string[] args)
{
IApplicationContext context = ContextRegistry.GetContext();
Console.ReadLine();
}
可以看到控制台打印了 "创建了A的实例",说明执行了A的构造方法,创建的A的实例。
如果配置文件里面有大量的对象,程序一开始创建大量对象的实例,无疑会造成程序启动缓慢。
这个时候可以采用延迟实例化对象的方法,将不必要在一开始就实例化的对象放到需要用到的时候再去实例化。
为了对照说明,再创建一个类B
namespace namespaceA
{
public class A
{
public A()
{
Console.WriteLine("创建了A的实例");
}
}
public class B
{
public B()
{
Console.WriteLine("创建了B的实例");
}
}
}
<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net">
<object name="a" type="namespaceA.A, ConsoleApplication1" />
<object name="b" type="namespaceA.B, ConsoleApplication1" lazy-init="true" />
</objects>
在Main方法中验证,获取上下文之后,做一个控制台输入的分割。 可以看到程序一开始只实例化了a,按下回车,执行到GetObject时,对象b才被创建。
static void Main(string[] args)
{
IApplicationContext context = ContextRegistry.GetContext();
Console.ReadLine();
B b = context.GetObject("b") as B;
Console.ReadLine();
}