博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第四章 Spring.Net 如何管理您的类___让对象了解自己的容器
阅读量:5338 次
发布时间:2019-06-15

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

  我们在开发中,经常需要让对象了解自己所在的容器的信息,例如,有时我们需要让对象知道,对象所在容器的引用是什么,或者是对象在容器中的名称是什么 。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 
2
3 4
5 6 7

主程序代码:

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 对象所在容器的引用,以及 在容器中该对象的名称。

 

转载于:https://www.cnblogs.com/hexu6788/archive/2013/03/12/2955242.html

你可能感兴趣的文章
C#类与结构体究竟谁快——各种函数调用模式速度评测
查看>>
我到底要选择一种什么样的生活方式,度过这一辈子呢:人生自由与职业发展方向(下)...
查看>>
poj 题目分类
查看>>
windows 安装yaml支持和pytest支持等
查看>>
读书笔记:季羡林关于如何做研究学问的心得
查看>>
面向对象的优点
查看>>
套接口和I/O通信
查看>>
阿里巴巴面试之利用两个int值实现读写锁
查看>>
浅谈性能测试
查看>>
Winform 菜单和工具栏控件
查看>>
CDH版本大数据集群下搭建的Hue详细启动步骤(图文详解)
查看>>
巧用Win+R
查看>>
浅析原生js模仿addclass和removeclass
查看>>
Python中的greenlet包实现并发编程的入门教程
查看>>
java中遍历属性字段及值(常见方法)
查看>>
深入理解jQuery框架-框架结构
查看>>
YUI3自动加载树实现
查看>>
python知识思维导图
查看>>
当心JavaScript奇葩的逗号表达式
查看>>
App Store最新审核指南(2015年3月更新版)
查看>>