容器中对象的部署分为两种方式:singleton和非singleton(java里叫prototype)。这里的singleton指的是“单例模式”,就是说当一个对象被定义为singleton时,容器中就只会有一个共享的实例,任何时候通过id或别名请求该对象都会返回这个共享实例的引用(也就是说这个对象只会被创建一次)。当使用非singleton,或者说原型模式布署时,每次请求对象都会创建新的实例。在某些场合,如果需要为每个用户返回单独的用户对象或其它对象,非singlton布署模式就比较理想。Spring.NET默认为singleton模式。每次调用GetObject方法时得到的都是同样的实例;当singleton="false"时,每次调用GetObject方法时得到的则是不同的实例。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace FirstSpringNetApp
{
public class PersonDao
{
public override string ToString()
{
return "我是PersonDao";
}
class Person {
public override string ToString()
{
return "我是Person";
}
}
public static PersonDao createInstance()
{
return new PersonDao();
}
}
}
Objects.xml
<object id="PersonDao" type="FirstSpringNetApp.PersonDao, FirstSpringNetApp" />
static void Main(string[] args)
{
// AppRegistry();
IApplicationContext ctx = ContextRegistry.GetContext();
PersonDao p1 = (PersonDao)ctx.GetObject("PersonDao");
PersonDao p2 = (PersonDao)ctx.GetObject("PersonDao");
Console.WriteLine(p1 == p2);
// Console.WriteLine(ctx.GetObject("instancePersonDao").ToString());
Console.ReadLine();
}
输入为TRUE,默认singleton="true"
如果:
<object id="PersonDao" type="FirstSpringNetApp.PersonDao, FirstSpringNetApp" singleton="false"/>
输出为:FALSE