博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring.Net学习笔记四(IOC容器对象的作用域)
阅读量:6376 次
发布时间:2019-06-23

本文共 1699 字,大约阅读时间需要 5 分钟。

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

     测试代码:

    

1 static void Main(string[] args) 2         { 3  4             string[] xmlFiles = new string[]  5             { 6                 "assembly:../../../../Objects.xml" 7             }; 8             IApplicationContext context = new XmlApplicationContext(xmlFiles); 9             IObjectFactory factory = (IObjectFactory)context;10 11             var obj1 = factory.GetObject("PersonDao");12             var obj2 = factory.GetObject("PersonDao");13             if (obj1.Equals(obj2))14             {15                 Console.WriteLine("同一个对象");16             }17 18             if (Object.ReferenceEquals(obj1, obj2))19             {20                 Console.WriteLine("同一个对象");21             }22             Console.ReadLine();23         }

<!--非单例模式-->

   <object id="person" type="SpringNetScop.Person, SpringNetScop" singleton="false" />

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

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

<!--调用时加载-->

 <object id="personServer" type="SpringNetScop.PersonServer, SpringNetScop" lazy-init="true" />

   设置为True时,实例化操作执行在new XmlApplicationContext(xmlFiles),设为false时,则执行在factory.GetObject("PersonDao");

   最后判断引用类型两个对象是否相等,可以参考:http://www.cnblogs.com/Dlonghow/archive/2008/08/04/1259732.html,这篇基本说的比较全,也好理解。

转载于:https://www.cnblogs.com/wangyhua/p/IOC4.html

你可能感兴趣的文章
医院CIO的一幅工作对联
查看>>
DPM灾难切换应用场景
查看>>
简单配置Oracle10g DataGuard物理备库
查看>>
网曝支付宝漏洞:手机丢了,支付宝也就完了
查看>>
4 在vCenter Server安装View Composer组件
查看>>
SFB 项目经验-24-为持久聊天室-查询或者增加成员
查看>>
Linux下配置Squid基础教程
查看>>
当Cacti遭遇大流量
查看>>
Outlook Anywhere 客户端配置详解
查看>>
来,测一下你的学习能力!
查看>>
《Windows Server 2008 R2系统管理实战》前言与内容提要
查看>>
轻巧的网络流量实时监控工具NTOPNG
查看>>
MySQL的log_bin和sql_log_bin 到底有什么区别?
查看>>
Access、Sql 获取当前插入的主键ID
查看>>
聚类算法之DBScan(Java实现)
查看>>
为什么要使用AOP?
查看>>
VC :模板类
查看>>
对C++中string类型的总结
查看>>
Oracle发布公共云Public Cloud
查看>>
表驱动
查看>>