第四章 Spring.Net 如何管理您的类___让对象了解自己的容器
来源:互联网 发布:深圳公司网络维护 编辑:程序博客网 时间:2024/03/28 20:35
我们在开发中,经常需要让对象了解自己所在的容器的信息,例如,有时我们需要让对象知道,对象所在容器的引用是什么,或者是对象在容器中的名称是什么 。Spring.Net 中提供了两个接口,我们使用这两个接口可以让对象了解自己的容器。
一 . IObjectFactoryAware 接口
实现了 Spring.Objects.Factory.IObjectFactoryAware 接口 的对象可以在被容器创建后获取它所在容器的引用。该接口只有一个(只写的)属性:
IObjectFactory ObjectFactory:该属性会在初始化方法(IInitializingObject 的 AfterPropertiesSet 方法,或在对象定义中由 init-method 属性 指定的方法)完成后被赋值。
IObjectFactoryAware 接口 允许对象通过编程方式访问创建它的容器,一般主要用来在编程时获得容器内的其它对象。虽然这种方式在某些情况下(似乎)很有用,但我们应该尽量避免这么做,因为这会导致代码同 Spring.NET 发生紧耦合,并且违反了控制反转原则。
二 . IObjectNameAware 接口
Spring.Objects.Factory.IObjectNameAware 接口 可让对象知道在容器中叫什么名称,如果对象需要知道自己在容器中的名称,可以实现该接口:
string ObjectName:该属性使实现了 IObjectNameAware 接口 的对象能够知道自己在容器中的名称。
我们来看代码:
Person 类,实现了 IPerson 接口,IPerson 接口有一个 SayHi() 方法,在 Person 类中还实现了 IObjectNameAware 和 IObjectFactoryAware 接口:
1 using System; 2 using Spring.Objects.Factory; 3 4 namespace CnblogLesson_4_8.Model 5 { 6 public class Person : IPerson, IObjectNameAware, IObjectFactoryAware 7 { 8 private string _objectName; 9 private IObjectFactory _iObjectFactory;10 11 public void SayHi()12 {13 Console.WriteLine("我的容器是{0},我叫{1}",_iObjectFactory,_objectName);14 }15 16 public string ObjectName17 {18 set19 {20 _objectName = value;21 Console.WriteLine("调用 IObjectNameAware 的设置 ObjectName 方法");22 }23 24 }25 26 public IObjectFactory ObjectFactory27 {28 set29 {30 _iObjectFactory = value;31 Console.WriteLine("调用IObjectFactoryAware 的设置 ObjectFactory 方法");32 }33 34 }35 }36 }
Objects.xml 配置:
1 <?xml version="1.0" encoding="utf-8" ?>2 <objects xmlns="http://www.springframework.net">3 4 <object id="hexu" type="CnblogLesson_4_8.Model.Person,CnblogLesson_4_8">5 </object>6 7 </objects>
主程序代码:
1 using System; 2 using Spring.Context; 3 using Spring.Context.Support; 4 using CnblogLesson_4_8.Model; 5 6 namespace CnblogLesson_4_8 7 { 8 class Program 9 {10 static void Main(string[] args)11 {12 Console.WriteLine("\n\n\n");13 14 //通过IApplicationContext来配置15 IApplicationContext context = ContextRegistry.GetContext();16 17 IPerson hexu = context.GetObject("hexu") as Person;18 hexu.SayHi();19 20 Console.ReadKey();21 }22 }23 }
看一下结果:
通过 IObjectNameAware, IObjectFactoryAware 接口,我们可以获取 hexu 对象所在容器的引用,以及 在容器中该对象的名称。
示例代码 : http://download.csdn.net/detail/cilence6788/5132327
<script type="text/javascript"><!--google_ad_client = "ca-pub-1944176156128447";/* cnblogs 首页横幅 */google_ad_slot = "5419468456";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
- 第四章 Spring.Net 如何管理您的类___让对象了解自己的容器
- 第四章 Spring.Net 如何管理您的类___对象的作用域
- 第四章 Spring.Net 如何管理您的类___自定义对象行为
- 第四章 Spring.Net 如何管理您的类___IObjectPostProcessor接口
- 【Spring】非SPRING管理的对象要引用SPRING容器管理的对象?对象之间如何引用?
- 自己了解的Spring
- Spring容器的简单了解
- 非spring管理的类实例如何托管给spring容器管理
- 如何让搜索引擎了解您的主页
- Java之旅Spring框架学习(3)——如何让容器管理你的Bean
- Spring提供的IoC容器可以让你迅速的了解其特点
- Spring容器管理对象
- spring容器管理对象
- 【学习笔记】《如何构建敏捷项目管理团队》第四章 改变自己的风格
- Spring如何管理Java普通类(Java类获取Spring容器的bean)
- 关于Spring管理的类如何创建对象。
- web 工程中 非spring 管理的对象 调用 spring 容器中对象
- spring容器对象的生命周期
- 转变SEO优化思维从软文化着手
- Loadrunner11.50和官方汉化包下载地址,更新LR11.51补丁包
- SDUT 2568 小白学Fibonacci之一
- Eclipse+PyDev 安装和配置
- MFC 创建非模态对话框
- 第四章 Spring.Net 如何管理您的类___让对象了解自己的容器
- AT&T汇编语法
- 将字符串a复制到b,并且每隔3个字符添加一个空格
- 起航
- android14_PendingIntent和Intent的区别
- P2020 (e500核)上电启动及uboot流程 .
- 程序人生--2003年(21)
- Python shelve简单数据存储
- 简单算法