




免费预览已结束,剩余23页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Spring.NET IoC教程目录基本信息1配置文件3获取对象5配置补充21列表参数25基本信息Spring.NET 移植自著名的 Java 开源项目 Spring,借助于 .NET 强大的反射机制,甚至拥有比原 Java 版本更强大的功能。只是不知道什么原因,在 .NET 领域似乎没有多少热度,其影响力甚至不如 Castle。因准备在个人项目中使用 IoC,因此花些时间对 Spring.NET 和 Castle 都作一些了解,本文权作学习笔记。Spring.NET 的宣传口号中有 non-invasiveness. Quite simply 的字样,表示是非入侵且易用的,当然作为一个IoC容器,这些都是最基本的特征。在 Spring.NET IoC 中最核心的内容应该是 IObjectFactory、IApplicationContext、IObjectDefinition 这三个接口了。IObjectFactory 是核心容器接口,负责管理容器内的注入对象,而 IApplicationContext 则是 IObjectFactory 的继承,它扩展了一些功能。IObjectDefinition 是注入对象的定义接口,供 IObjectFactory / IApplicationContext 调用。大多数时候我们会选择 IApplicationContext 接口的实现类来操控 Spring.NET IoC 容器。1. Spring.Context.Support.ContextRegistry 将配置信息写入 app.config / web.config 时所使用该类。2. Spring.Context.Support.XmlApplicationContext使用独立的 xml 配置文件,或者使用多个 xml 配置文件时,使用该类。3. Spring.Context.Support.StaticApplicationContext 直接在代码中装配容器时,使用该类。当然,你还可以使用 Spring.Objects.Factory.Xml.XmlObjectFactory 等直接实现 IObjectFactory 的类型。作为该篇的结束,写一个简单的 Hello World 尝试一下。using System;using System.Collections.Generic;using System.Text;using System.Threading;using Spring.Core;using Spring.Context;using Spring.Context.Support;namespace ConsoleApplication1.SpringNetpublic class HelloWorldpublic override string ToString()return Hello, World!;public class Programstatic void Main(string args)StaticApplicationContext context = new StaticApplicationContext();context.RegisterPrototype(HelloWorld, typeof(HelloWorld), null);object o = context.GetObject(HelloWorld);Console.WriteLine(o);配置文件Spring.NET IoC 支持2种配置文件方式:1. 应用程序配置文件app.config / web.config test.cs IApplicationContext context = ContextRegistry.GetContext();object o = context.GetObject(HelloWorld);2. 独立配置文件springtest.xml test.cs IApplicationContext context = new XmlApplicationContext(springtest.xml);object o = context.GetObject(HelloWorld);建议使用独立的配置文件,应用程序配置文件已经被塞入太多内容了。Spring.NET 还支持很多高级的配置文件功能,将在后面做进一步介绍。获取对象依照第二篇的配置文件,我们可以初步注入我们所需的类型。本篇将记录获取对象的不同方法。1. 构造方法创建对象这种方式最常见,大多数时候我们都会采取此方式获取对象。如果目标对象需要提供构造参数,我们也可以在配置文件中提供。using System;using System.Collections.Generic;using System.Text;using System.Threading;using Spring.Core;using Spring.Context;using Spring.Context.Support;namespace ConsoleApplication1.SpringNetpublic class HelloWorldprivate string name;private int age;public HelloWorld(string name, int age) = name;this.age = age;public override string ToString()return String.Format(Name=0; Age=1, name, age);public class Programstatic void Main(string args)IApplicationContext context = new XmlApplicationContext(ConfigSpring.xml);object o = context.GetObject(HelloWorld);Console.WriteLine(o);需要注意的是 Spring.NET IoC 缺省对象创建方式是 Singleton,我们写个例子验证一下。object o = context.GetObject(HelloWorld);object o2 = context.GetObject(HelloWorld);Console.WriteLine(object.ReferenceEquals(o, o2); / output: true我们只需在配置文件中添加一个标记即可改变为非 Singleton 方式。2. 静态工厂方法创建对象我们提供另外一个 HelloWorld 类,该类型没有公用构造方法,只能通过静态方法创建对象。using System;using System.Collections.Generic;using System.Text;using System.Threading;using Spring.Core;using Spring.Context;using Spring.Context.Support;namespace ConsoleApplication1.SpringNetpublic class HelloWorldprivate HelloWorld()public static HelloWorld Create()return new HelloWorld();public class Programstatic void Main()IApplicationContext context = new XmlApplicationContext(ConfigSpring.xml);object o = context.GetObject(HelloWorld);object o2 = context.GetObject(HelloWorld);Console.WriteLine(object.ReferenceEquals(o, o2); / output: true对于这种方式,我们只需指定 factory-method 即可,需要注意的是所指定的方法必须是静态方法。3. 实例工厂方法创建对象修改上面的例子。在下面的代码中我们必须通过一个名为 Creator 的类才能创建 HelloWorld。using System;using System.Collections.Generic;using System.Text;using System.Threading;using Spring.Core;using Spring.Context;using Spring.Context.Support;namespace ConsoleApplication1.SpringNetpublic class Creatorpublic HelloWorld Create()return new HelloWorld();public class HelloWorldinternal HelloWorld()public class Programstatic void Main()IApplicationContext context = new XmlApplicationContext(ConfigSpring.xml);object o = context.GetObject(HelloWorld);object o2 = context.GetObject(HelloWorld);Console.WriteLine(object.ReferenceEquals(o, o2); / output: true通过上面的配置文件我们知道,我们必须提供一个 Creator 的注入声明,同时要为 HelloWorld 指定创建者的 factory-object 和 factory-method。4. 对象初始化方法我们可以在配置文件中使用 init-method 指定类型构造方法以外的初始化方法。该方法会在对象构造方法之后被容器调用执行,以便我们完成一些初始化操作。using System;using System.Collections.Generic;using System.Text;using System.Threading;using Spring.Core;using Spring.Context;using Spring.Context.Support;namespace ConsoleApplication1.SpringNetpublic class HelloWorldpublic HelloWorld()public void Init()Console.WriteLine(Init.);public class Programstatic void Main()IApplicationContext context = new XmlApplicationContext(ConfigSpring.xml);object o = context.GetObject(HelloWorld);Console.WriteLine(o);需要注意的是对于 Singleton 方式来说,初始化只会被执行一次,因为后续对象是直接从容器中拷贝引用而已。5. 设置对象属性除了在配置文件中提供构造参数外,我们还可以直接为对象属性赋值。using System;using System.Collections.Generic;using System.Text;using System.Threading;using Spring.Core;using Spring.Context;using Spring.Context.Support;namespace ConsoleApplication1.SpringNetpublic class HelloWorldpublic HelloWorld()private string name;public string Nameget return name; set name = value; public override string ToString()return name;public class Programstatic void Main()IApplicationContext context = new XmlApplicationContext(ConfigSpring.xml);object o = context.GetObject(HelloWorld);Console.WriteLine(o);6. 设置类型参数上面的例子我们注入的数据都是基本类型,对于自定义类型我们需要做些声明。下面的例子中 HelloWorld 需要 2 个构造参数,分别是一个自定义类型和 Type。using System;using System.Collections.Generic;using System.Text;using System.Threading;using Spring.Core;using Spring.Context;using Spring.Context.Support;namespace ConsoleApplication1.SpringNetpublic class MyDatapublic override string ToString()return MyData.;public class HelloWorldprivate MyData data;public HelloWorld(MyData data, Type type)this.data = data;Console.WriteLine(type);public override string ToString()return data.ToString();public class Programstatic void Main()IApplicationContext context = new XmlApplicationContext(ConfigSpring.xml);object o = context.GetObject(HelloWorld);Console.WriteLine(o);一定要注意,注入一个对象和一个 Type 的不同之处。配置补充1. 别名我们为 HelloWorld 创建了一个别名 HelloWorld2,我们同样可以通过 HelloWorld2 获取对象。请注意下面的测试代码输出结果。object o = context.GetObject(HelloWorld);object o2 = context.GetObject(HelloWorld2);Console.WriteLine(object.ReferenceEquals(o, o2); / output: true2. 继承下面的例子中,我们为 HelloWorld 添加了一个 parent 声明,该申明表示 HelloWorld 继承 test 的配置属性,包括构造参数和属性设置,但不包括 singleton 等。当然继承的仅仅是配置信息,而不是类型。 3. 内联对于下面的配置文件,我们还可以改成内联方式。修改结果4. 空值注意空值(null) 和空字符串()不同。列表参数我们可以在配置文件中向构造方法或者属性注入列表型参数,诸如 Array、ArrayList、Hashtable 等。1. IList在 .NET Framework 中实现 IList 的主要是 Array、ArrayList。1234public class HelloWorldpublic Hell
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年镀锡板卷行业研究报告及未来行业发展趋势预测
- 2024秋七年级数学上册 第3章 一次方程与方程组3.3 二元一次方程组及其解法 4用加减法解二元一次方程组说课稿(新版)沪科版
- 基于用户画像的热键预测-洞察及研究
- 微生物元基因组学-洞察及研究
- 2025年低剂量水合物抑制剂行业研究报告及未来行业发展趋势预测
- 高炉运转工技术考核试卷及答案
- 风景区酒店客房及旅游服务整体租赁合同范本
- 免疫疾病智能诊断模型-洞察及研究
- 工业车辆装配调试工知识考核试卷及答案
- 香港电子合同在旅游行业的应用与创新
- 2025保密教育线上培训考试题库(含答案)
- 2025宁波宁海县国有企业招聘52人考试参考试题及答案解析
- GB/T 45940-2025网络安全技术网络安全运维实施指南
- 教育与宗教分离课件
- 2025年环境工程师初级职称考试试题及答案解析
- 眼科特检基础知识培训课件
- 高考历史一轮复习资料(人教版)专题二古代中国的农耕经济专题质量检测(A卷)
- 2025 年小升初沈阳市初一新生分班考试数学试卷(带答案解析)-(人教版)
- 摄影剪辑基本知识培训课件
- 高校学管中心面试真题与答案解析
- 凿壁借光课文讲解
评论
0/150
提交评论