第四章 Spring.Net 如何管理您的类___让对象了解自己的容器
2013-03-12 10:49
776 查看
我们在开发中,经常需要让对象了解自己所在的容器的信息,例如,有时我们需要让对象知道,对象所在容器的引用是什么,或者是对象在容器中的名称是什么 。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 接口:
Objects.xml 配置:
主程序代码:
看一下结果:
通过 IObjectNameAware, IObjectFactoryAware 接口,我们可以获取 hexu 对象所在容器的引用,以及 在容器中该对象的名称。
示例代码 : http://download.csdn.net/detail/cilence6788/5132327
一 . 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 接口:
using System; using Spring.Objects.Factory; namespace CnblogLesson_4_8.Model { public class Person : IPerson, IObjectNameAware, IObjectFactoryAware { private string _objectName; private IObjectFactory _iObjectFactory; public void SayHi() { Console.WriteLine("我的容器是{0},我叫{1}",_iObjectFactory,_objectName); } public string ObjectName { set { _objectName = value; Console.WriteLine("调用 IObjectNameAware 的设置 ObjectName 方法"); } } public IObjectFactory ObjectFactory { set { _iObjectFactory = value; Console.WriteLine("调用IObjectFactoryAware 的设置 ObjectFactory 方法"); } } } }
Objects.xml 配置:
<?xml version="1.0" encoding="utf-8" ?> <objects xmlns="http://www.springframework.net"> <object id="hexu" type="CnblogLesson_4_8.Model.Person,CnblogLesson_4_8"> </object> </objects>
主程序代码:
using System; using Spring.Context; using Spring.Context.Support; using CnblogLesson_4_8.Model; namespace CnblogLesson_4_8 { class Program { static void Main(string[] args) { Console.WriteLine("\n\n\n"); //通过IApplicationContext来配置 IApplicationContext context = ContextRegistry.GetContext(); IPerson hexu = context.GetObject("hexu") as Person; hexu.SayHi(); Console.ReadKey(); } } }
看一下结果:
通过 IObjectNameAware, IObjectFactoryAware 接口,我们可以获取 hexu 对象所在容器的引用,以及 在容器中该对象的名称。
示例代码 : http://download.csdn.net/detail/cilence6788/5132327
相关文章推荐
- 第四章 Spring.Net 如何管理您的类___让对象了解自己的容器
- 第四章 Spring.Net 如何管理您的类___让对象了解自己的容器
- 第四章 Spring.Net 如何管理您的类___对象的自动装配
- 第四章 Spring.Net 如何管理您的类___对象、对象工厂和应用程序上下文
- 第四章 Spring.Net 如何管理您的类___对象的作用域
- 第四章 Spring.Net 如何管理您的类___对象的生命周期链
- 第四章 Spring.Net 如何管理您的类___对象的初始化方式
- 第四章 Spring.Net 如何管理您的类___对象的初始化方式
- 第四章 Spring.Net 如何管理您的类___自定义对象行为
- 第四章 Spring.Net 如何管理您的类___对象的手动装配
- 第四章 Spring.Net 如何管理您的类___对象的作用域
- 第四章 Spring.Net 如何管理您的类___对象、对象工厂和应用程序上下文
- 第四章 Spring.Net 如何管理您的类___对象的自动装配
- 第四章 Spring.Net 如何管理您的类___对象的手动装配
- 第四章 Spring.Net 如何管理您的类___对象的生命周期链
- 第四章 Spring.Net 如何管理您的类___对象的作用域
- 第四章 Spring.Net 如何管理您的类___自定义对象行为
- 第四章 Spring.Net 如何管理您的类___自定义对象行为
- 第四章 Spring.Net 如何管理您的类___IObjectPostProcessor接口
- Spring.Net 如何管理您的类___自定义对象行为