Spring.net(容器中对象的作用域)

容器中对象的部署分为两种方式: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

 

 

你可能感兴趣的:(spring,xml,.net,prototype,LINQ)