SPRING.NET 1.3.2 学习18--方法注入之IObjectFactoryAware,IObjectNameAware
2013-03-26 10:37
519 查看
多数用户都会将容器中的大部分对象布署为singleton模式。当一个singleton对象需要和另一个singleton对象协作,或者一个非singleton对象需要和另一个非singleson对象协作时,Spring.NET都能很好的处理它们的依赖关系。但是,如果对象的生存周期不同,就可能会产生问题。例如,假设一个singleton对象A要使用一个非singleton(原型)对象B,A中的每个方法都会用到B的新实例。由于A是singleton对象,容器只有会创建它一次,也就是说只有一次给A的属性赋值的机会,所以不可能在每次A需要的时候都给它注入一个新的B。
有一种解决的办法有点违背控制反转原则:类A可以通过实现IObjectFactoryAware接口来获取容器的引用,并调用GetObject("B")在每次需要的时候从容器中请求一个(新的)对象B。但这并不是一个很好的解决方案,因为客户代码此时必须要和Spring.NET发生紧耦合。
通过方法注入,我们可以用更优雅的方式解决类似的问题。(摘自Spring.NET中文手册)
Spring.Net 中提供了两个接口,我们使用这两个接口可以让对象了解自己的容器。
一 . IObjectFactoryAware 接口实现了 Spring.Objects.Factory.IObjectFactoryAware 接口 的对象可以在被容器创建后获取它所在容器的引用。该接口只有一个(只写的)属性:IObjectFactory ObjectFactory:该属性会在初始化方法(IInitializingObject 的 AfterPropertiesSet 方法,或在对象定义中由 init-method 属性 指定的方法)完成后被赋值。IObjectFactoryAware 接口 允许对象通过编程方式访问创建它的容器,一般主要用来在编程时获得容器内的其它对象。虽然这种方式在某些情况下(似乎)很有用,但我们应该尽量避免这么做,因为这会导致代码同 Spring.NET 发生紧耦合,并且违反了控制反转原则。 二 . IObjectNameAware 接口Spring.Objects.Factory.IObjectNameAware 接口 可让对象知道在容器中叫什么名称,如果对象需要知道自己在容器中的名称,可以实现该接口:string ObjectName:该属性使实现了 IObjectNameAware 接口 的对象能够知道自己在容器中的名称。此文章展示了它们的用法http://www.cnblogs.com/cilence/archive/2013/03/12/2955242.html
有一种解决的办法有点违背控制反转原则:类A可以通过实现IObjectFactoryAware接口来获取容器的引用,并调用GetObject("B")在每次需要的时候从容器中请求一个(新的)对象B。但这并不是一个很好的解决方案,因为客户代码此时必须要和Spring.NET发生紧耦合。
通过方法注入,我们可以用更优雅的方式解决类似的问题。(摘自Spring.NET中文手册)
Spring.Net 中提供了两个接口,我们使用这两个接口可以让对象了解自己的容器。
一 . IObjectFactoryAware 接口实现了 Spring.Objects.Factory.IObjectFactoryAware 接口 的对象可以在被容器创建后获取它所在容器的引用。该接口只有一个(只写的)属性:IObjectFactory ObjectFactory:该属性会在初始化方法(IInitializingObject 的 AfterPropertiesSet 方法,或在对象定义中由 init-method 属性 指定的方法)完成后被赋值。IObjectFactoryAware 接口 允许对象通过编程方式访问创建它的容器,一般主要用来在编程时获得容器内的其它对象。虽然这种方式在某些情况下(似乎)很有用,但我们应该尽量避免这么做,因为这会导致代码同 Spring.NET 发生紧耦合,并且违反了控制反转原则。 二 . IObjectNameAware 接口Spring.Objects.Factory.IObjectNameAware 接口 可让对象知道在容器中叫什么名称,如果对象需要知道自己在容器中的名称,可以实现该接口:string ObjectName:该属性使实现了 IObjectNameAware 接口 的对象能够知道自己在容器中的名称。此文章展示了它们的用法http://www.cnblogs.com/cilence/archive/2013/03/12/2955242.html
相关文章推荐
- SPRING.NET 1.3.2 学习19--方法注入之查询方法注入
- SPRING.NET 1.3.2 学习20--方法注入之替换方法注入
- SPRING.NET 1.3.2 学习23--使用方法的返回值进行注入
- SPRING.NET 1.3.2 学习22--使用字段值进行注入
- SPRING.NET 1.3.2 学习21--使用对象或类的属性值进行注入
- SPRING.NET 1.3.2 学习15--事件注入
- Spring.NET依赖注入框架学习--实例化容器常用方法
- SPRING.NET 1.3.2 学习5--依赖注入
- Spring.Net对方法的注入(学习笔记三)
- Spring学习笔记(10)——方法注入
- SPRING.NET 1.3.2 学习2--快速入门应用示例说明
- SPRING.NET 1.3.2 学习16--使用depends-on
- 关于spring.net的面向切面编程 (Aspect Oriented Programming with Spring.NET)-使用工厂创建代理(Using the ProxyFactoryObject to create AOP proxies)
- SPRING.NET 1.3.2 学习24--通用日志功能
- 码农小汪-spring框架学习之3-spring Method injection(方法注入 ) Lookup method injection
- spring-boot中可以注入 ObjectFactory<HttpMessageConverters>
- SSH与SSM学习之Spring04——Spring属性注入之set方法注入
- SPRING.NET 1.3.2 学习10--合并集合对象
- org.springframework.beans.factory.BeanCreationException: Error creating bean with name的解决方法
- Spring.NET依赖注入框架学习--入门