Spring.Net-DI依赖注入和Ioc控制反转
2015-06-26 22:51
766 查看
Spring.Core作为整个Spring框架的基础,实现了依赖注入的功能。Spring框架的其它模块都要依赖或扩展该模块。
IObjectFactory接口,该接口实现了工厂模式,使用它可以帮我们创建对象,与具体的程序逻辑解耦。
IApplicationContext是IObjectFactory的扩展,增加了许多企业级的功能,包括使用资源文件进行文本本地化,事件传播,资源装载等等。
Spring.Net的配置
使用Spring.Net创建对象,需要在程序配置文件中配置
1:配置spring.Core的核心处理类型
在configSections节点中新增Spring的sectionGroup节点,申明Spring.Net处理的类型
2:配置Spring框架如何创建对象的spring节点
spring定义了Spring.Net框架如何创建对象,Spring.Net框架使用这些配置信息,创建对象的。
每一个object节点定义了一个类型创建的配置信息,type属性中第一个参数是类型的完整名称,第二个参数是类型所在的dll名称
可以把spring节点中的objects节点单独放入另外一个Xml中
Spring.Net创建对象
创建IApplicationContext接口,使用该接口的GetObject()方法,其参数就是配置文件中的object节点的id属性值,依据type属性值,创建对象。返回object类型
IApplicationContext是IObjectFactory的扩展,可以将IApplicationContext转换成IObjectFactory接口,调用其GetObject()方法。
在Sping.Net的配置文件中,将objects节点单独移出,放在一个单独的xml文件中,使用物理路径实例化IObjectFactory接口对象
也可以在代码中指定在程序集中下寻找配置文件,这就需要将Objects.xml文件属性复制到输出目录选为始终复制
而最常用的做法是,在配置文件App.config或者Web.Config中添加自定义配置节点,这种做法是和将Objects节点放在配置文件中,是一样的效果
那么在程序中不需要指定Objects.xml的位置,直接创建IApplicationContext或者IObjectFactory接口对象
IObjectFactory接口,该接口实现了工厂模式,使用它可以帮我们创建对象,与具体的程序逻辑解耦。
IApplicationContext是IObjectFactory的扩展,增加了许多企业级的功能,包括使用资源文件进行文本本地化,事件传播,资源装载等等。
Spring.Net的配置
使用Spring.Net创建对象,需要在程序配置文件中配置
1:配置spring.Core的核心处理类型
在configSections节点中新增Spring的sectionGroup节点,申明Spring.Net处理的类型
<configSections> <sectionGroup name="spring"> <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core" /> <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" /> </sectionGroup> </configSections>
2:配置Spring框架如何创建对象的spring节点
spring定义了Spring.Net框架如何创建对象,Spring.Net框架使用这些配置信息,创建对象的。
每一个object节点定义了一个类型创建的配置信息,type属性中第一个参数是类型的完整名称,第二个参数是类型所在的dll名称
可以把spring节点中的objects节点单独放入另外一个Xml中
<spring> <context> <!--<resource uri="assembly://SpringNetStudy.Control/SpringNetStudy.Control/Objects.xml" />--> <resource uri="config://spring/objects" /> </context> <objects xmlns="http://www.springframework.net"> <!-- Objects节点可以移动到其它地方--> <description>一个简单的控制反转例子</description> <object id="PersonDao" type="SpringNetStudy.Control.PersonDao, SpringNetStudy.Control" /> </objects> </spring>
Spring.Net创建对象
IApplicationContext ctx = ContextRegistry.GetContext(); IObjectFactory objectFactory = (IApplicationContext)ctx; //IPersonDao personDao = ctx.GetObject("PersonDao") as IPersonDao; IPersonDao personDao = objectFactory.GetObject("PersonDao") as IPersonDao; personDao.Save();
创建IApplicationContext接口,使用该接口的GetObject()方法,其参数就是配置文件中的object节点的id属性值,依据type属性值,创建对象。返回object类型
IApplicationContext是IObjectFactory的扩展,可以将IApplicationContext转换成IObjectFactory接口,调用其GetObject()方法。
IResource input = new FileSystemResource(@"B:\Project\SpringNetStudy\SpringNetStudy\SpringNetStudy.Control\Objects.xml"); IObjectFactory factory = new XmlObjectFactory(input); IPersonDao personDao = factory.GetObject("PersonDao") as IPersonDao; personDao.Save(); Console.ReadLine();
在Sping.Net的配置文件中,将objects节点单独移出,放在一个单独的xml文件中,使用物理路径实例化IObjectFactory接口对象
string[] xmlFiles = new string[] { "file://Objects.xml" }; IApplicationContext context = new XmlApplicationContext(xmlFiles); IObjectFactory factory = (IObjectFactory)context; IPersonDao personDao = factory.GetObject("PersonDao") as IPersonDao; personDao.Save(); Console.ReadLine();
也可以在代码中指定在程序集中下寻找配置文件,这就需要将Objects.xml文件属性复制到输出目录选为始终复制
而最常用的做法是,在配置文件App.config或者Web.Config中添加自定义配置节点,这种做法是和将Objects节点放在配置文件中,是一样的效果
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections> <sectionGroup name="spring"> <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core" /> <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" /> </sectionGroup> </configSections>
<spring>
<context>
<resource uri="file://Objects.xml"></resource>
<resource uri="config://spring/objects" />
</context>
<objects xmlns="http://www.springframework.net">
</objects>
</spring>
</configuration>
那么在程序中不需要指定Objects.xml的位置,直接创建IApplicationContext或者IObjectFactory接口对象
IApplicationContext ctx = ContextRegistry.GetContext(); IObjectFactory objectFactory = (IObjectFactory)ctx; //IPersonDao personDao = ctx.GetObject("PersonDao") as IPersonDao; IPersonDao personDao = objectFactory.GetObject("PersonDao") as IPersonDao; personDao.Save();
相关文章推荐
- java.sql.SQLException: [Microsoft][ODBC 驱动程序管理器] 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配
- JavaSE笔记之<final关键字>
- spring学习3-第一次测试成功
- [Eclipse] Eclipse中,Add Jars与Add Library的区别
- Java io流之File
- spring 的注解能互相感知?
- [Java]学习笔记,随笔【三】
- java 基础----抽象类与接口的区别,知道区别才能准备的应用
- Java反射(四)利用反射调用方法
- Java中4大基本加密算法解析
- Java内存管理机制
- 看源码的一些总结
- springsecurity-servlet 在项目中应用
- Java中数组和类的层次体系结构
- 第一个小项目
- 浅析Java中的final关键字
- Java 之 内部类
- Java反射(三)在运行时利用反射分析对象
- Struts框架之处理流程和类型转换器
- 问题解决——SpringMVC