Spring.NET学习笔记5——容器中对象的作用域(基础篇) Level 200

本文深入探讨了Spring.NET中对象部署的两种方式:单例模式(singleton)和非单例模式(prototype)。单例模式确保容器中只有一个共享实例,而非单例模式则允许每次请求时创建新的实例。通过示例代码,展示了如何配置这两种模式,并解释了它们在实际应用中的区别与应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

容器中对象的部署分为两种方式:singleton和非singleton(java里叫prototype)。这里的singleton指的是“单例模式”,就是说当一个对象被定义为singleton时,容器中就只会有一个共享的实例,任何时候通过id或别名请求该对象都会返回这个共享实例的引用(也就是说这个对象只会被创建一次)。当使用非singleton,或者说原型模式布署时,每次请求对象都会创建新的实例。在某些场合,如果需要为每个用户返回单独的用户对象或其它对象,非singlton布署模式就比较理想。Spring.NET默认为singleton模式。每次调用GetObject方法时得到的都是同样的实例;当singleton="false"时,每次调用GetObject方法时得到的则是不同的实例。


  <!--单例模式-->
  <object id="personDao" type="SpringNetScop.PersonDao, SpringNetScop" />

CreateWithSingleton
        [Test]
        public void CreateWithSingleton()
        {
            string[] xmlFiles = new string[]
            {
                "assembly://SpringNetScop/SpringNetScop/Objects.xml"
            };
            IApplicationContext context = new XmlApplicationContext(xmlFiles);

            IObjectFactory factory = (IObjectFactory)context;
            object obj1 = factory.GetObject("personDao");
            object obj2 = factory.GetObject("personDao");
            Assert.AreEqual(obj1, obj2);
        }我们用NUnit可以看到下图:
 

 

 

 

 

 

 

 

 

 

 

 

 

 

使用singleton="false"的代码


  <!--非单例模式-->
  <object id="person" type="SpringNetScop.Person, SpringNetScop" singleton="false" />

CreateWithOutSingleton
        [Test]
        public void CreateWithOutSingleton()
        {
            string[] xmlFiles = new string[]
            {
                "assembly://SpringNetScop/SpringNetScop/Objects.xml"
            };
            IApplicationContext context = new XmlApplicationContext(xmlFiles);

            IObjectFactory factory = (IObjectFactory)context;
            object obj1 = factory.GetObject("person");
            object obj2 = factory.GetObject("person");
            Assert.AreNotEqual(obj1, obj2);
        }

Person
    public class Person
    {
        public Person()
        {
            Console.WriteLine("Person被实例");
        }

        public override string ToString()
        {
            return "我是Person";
        }

        ~Person()
        {
            Console.WriteLine("Person被销毁");
      

图为:
 

 

 

 

 

 

 

 

 

 

 

 

 

这说明singleton=false后,每次调用GetObject方法获取的对象是不同实例的,当脱离调用方法(CreateWithOutSingleton)的作用域后,该实例会被Spring.NET容器销毁。

  

   lazy-init属性是指:当Spring.NET容器初始化的时候标注该属性的对象将被实例化,反之则是调用GetObject方法的时候才被实例化。

  <!--调用时加载-->
  <object id="personServer" type="SpringNetScop.PersonServer, SpringNetScop" lazy-init="true" />

CreateWithLazy
        [Test]
        public void CreateWithLazy()
        {
            string[] xmlFiles = new string[]
            {
                "assembly://SpringNetScop/SpringNetScop/Objects.xml"
            };
            IApplicationContext context = new XmlApplicationContext(xmlFiles);

            IObjectFactory factory = (IObjectFactory)context;

            object dao = factory.GetObject("personDao");
            Console.WriteLine(dao.ToString());

            object server = factory.GetObject("personServer");
            Console.WriteLine(server.ToString());
        }

PersonServer
    public class PersonServer
    {
        public PersonServer()
        {
            Console.WriteLine("PersonServer被实例");
        }

        public override string ToString()
        {
            return "我是PersonServer";
        }
    }

如图:

 

 

 

 

 

 

 

 

 

 

 

 

PersonDao类

未设置lazy-init属性,则当Spring.NET初始化时被实例;PersonServer类设置lazy-init="true",则当调用GetObject方法时才被实例。


一般情况下可以有选择的设置lazy-init属性,正如双刃剑一样,设置为lazy-init=true的时候应用程序启动时会快一点,但是在启动的时候就不能够帮我们检测错误,但当调用的时候一旦发生错误,后果是不堪设想的。

  更多资料请查看Spring.NET中文手册。

 

  代码下载 

 

 

内容概要:本文探讨了在MATLAB/SimuLink环境中进行三相STATCOM(静态同步补偿器)无功补偿的技术方法及其仿真过程。首先介绍了STATCOM作为无功功率补偿装置的工作原理,即通过调节交流电压的幅值和相位来实现对无功功率的有效管理。接着详细描述了在MATLAB/SimuLink平台下构建三相STATCOM仿真模型的具体步骤,包括创建新模型、添加电源和负载、搭建主电路、加入控制模块以及完成整个电路的连接。然后阐述了如何通过对STATCOM输出电压和电流的精确调控达到无功补偿的目的,并展示了具体的仿真结果分析方法,如读取仿真数据、提取关键参数、绘制无功功率变化曲线等。最后指出,这种技术可以显著提升电力系统的稳定性电能质量,展望了STATCOM在未来的发展潜力。 适合人群:电气工程专业学生、从事电力系统相关工作的技术人员、希望深入了解无功补偿技术的研究人员。 使用场景及目标:适用于想要掌握MATLAB/SimuLink软件操作技能的人群,特别是那些专注于电力电子领域的从业者;旨在帮助他们学会建立复杂的电力系统仿真模型,以便更好地理解STATCOM的工作机制,进而优化实际项目中的无功补偿方案。 其他说明:文中提供的实例代码可以帮助读者直观地了解如何从零开始构建一个完整的三相STATCOM仿真环境,并通过图形化的方式展示无功补偿的效果,便于进一步的学习研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值