Spring.Net学习笔记三(对象的创建)

本文接下来要阐述的是IOC对象怎么创建,主要有3种方法:

第一种:构造器创建(嵌套类型对象的创建需要用“+”号来连接被嵌套的类型。如果在PersonDao中嵌套了类型Person)

类库代码:

 1 namespace Dao
 2 {
 3     public interface IPersonDao
 4     {
 5         void Save();
 6     }
 7     public class PersonDao : IPersonDao
 8     {
 9         public void Save()
10         {
11             Console.WriteLine("保存 Person");
12         }
13     }
14
15     public class PersonDao1 : IPersonDao
16     {
17         public void Save()
18         {
19             Console.WriteLine("保存 Person1");
20         }
21     }
22 }

配置文件还是跟以前一样:

1  <objects xmlns="http://www.springframework.net">
2       <!--这里放容器里面的所有节点-->
3       <description>An  example that demonstrates simple IoC features.</description>
4       <!--name 必须要唯一的,type=类的全名称,所在的程序集-->
5       <object name="PersonDao" type="Dao.PersonDao1, Dao">
6       </object>
7     </objects>
1  string[] xmlFiles = new string[] 
2             {
3                 "assembly:../../../../Objects.xml"
4             };
5             IApplicationContext context = new XmlApplicationContext(xmlFiles);
6             IObjectFactory factory = (IObjectFactory)context;
7             Console.WriteLine(factory.GetObject("personDao").ToString());

不知道为什么路径是这样而不是../../这样的,望有高手看到能解决我心中疑问。

第二中:静态工厂即简单工厂创建对象

1   public class StaticObjectsFactory
2     {
3         public static IPersonDao CreateInstance()
4         {
5             return new PersonDao1();
6         }
7     }

调用:

1  IApplicationContext context = new XmlApplicationContext(xmlFiles);
2             IObjectFactory factory = (IObjectFactory)context;
3             Console.WriteLine(factory.GetObject("staticObjectsFactory").ToString());
<object name="staticObjectsFactory" type="CreateObjects.StaticObjectsFactory, CreateObjects" factory-method="CreateInstance"/>

第三:使用实例工厂创建对象

使用实例工厂创建对象需要先定义一个工厂,然后设置factory-object和factory-method属性,且满足 实例工厂方法所在的对象必须也要配置在同一容器(或父容器)中 和 对象定义就不能包含type属性

类库代码:

 1  public class StaticObjectsFactory
 2     {
 3         public IPersonDao CreateInstance()
 4         {
 5             return new instanceObjectsFactory().CreateInstance();
 6         }
 7     }
 8
 9  public class instanceObjectsFactory
10     {
11         public IPersonDao CreateInstance()
12         {
13             return new PersonDao1();
14         }
15     }
1 <objects xmlns="http://www.springframework.net">
2   <!--这里放容器里面的所有节点-->
3   <description>An  example that demonstrates simple IoC features.</description>
4   <object name="staticObjectsFactory" type="Dao.StaticObjectsFactory,Dao"/>
5   <object name="instancePersonDao" factory-method="CreateInstance" factory-object="staticObjectsFactory"/>
6 </objects>
7   

调用:

 1 string[] xmlFiles = new string[] 
 2             {
 3                 "assembly:../../../../Objects.xml"
 4             };
 5             IApplicationContext context = new XmlApplicationContext(xmlFiles);
 6             IObjectFactory factory = (IObjectFactory)context;
 7             IPersonDao dao = (IPersonDao)factory.GetObject("instancePersonDao");
 8             if (dao != null)
 9             {
10                 dao.Save();
11                 Console.WriteLine("我是IoC方法");
12                 Console.ReadKey();
13             }

第四、泛型类型的创建

 1  public class Pig<T>
 2     {
 3         public void Save()
 4         {
 5             Console.WriteLine(1);
 6         }
 7     }
 8
 9   <object id="pig" type="Dao.Pig&lt;int>, Dao"/>
10
11    string[] xmlFiles = new string[] 
12             {
13                 "assembly:../../../../Objects.xml"
14             };
15             IApplicationContext context = new XmlApplicationContext(xmlFiles);
16             IObjectFactory factory = (IObjectFactory)context;
17             object obj = factory.GetObject("pig");
18
19             Console.WriteLine(obj.ToString());
20             Console.ReadLine();

泛型类型的创建比较类型于以上几种创建方式,可以有通过构造器创建,还可以通过静态或者实例工厂创建。但是设置type属性的时候要注意:左尖括号<要替换成字符串“&lt;”,因为在XML中左尖括号会被认为是小于号。

时间: 2024-10-13 21:44:44

Spring.Net学习笔记三(对象的创建)的相关文章

Spring Batch学习笔记三:JobRepository

此系列博客皆为学习Spring Batch时的一些笔记: Spring Batch Job在运行时有很多元数据,这些元数据一般会被保存在内存或者数据库中,由于Spring Batch在默认配置是使用HSQLDB,也就是说在Job的运行过程中,所有的元数据都被储存在内存中,在Job结束后会随着进程的结束自动消失:在这里我们推荐配置JobRepository去使用MySQL. 在这种情况下,Spring Batch在单次执行或者从一个执行到另外一个执行的时候会使用数据库去维护状态,Job执行的信息包

Javascript学习笔记:对象的创建

最基本的对象创建方式是通过Object构造函数或对象字面量的方式创建: ①通过Object构造函数的方式创建对象: 1 var person=new Object();//或者写成var person={} 2 person.name='张三'; ②通过对象字面量的方式创建对象: 1 var person={name:'张三'}; Object构造函数模式和对象字面量模式这两种创建对象的方式,都有明显的缺点:使用同一个接口创建很多对象的时候,会产生大量的重复代码.为解决这个问题,可以使用工厂模式

JAVA学习笔记(三十八)- 创建实现Runnable接口的线程

创建实现Runnable接口的线程 /* * 创建线程方式二:实现Runnable接口 * 步骤: * 1.创建一个Runnable接口的实现类 * 2.实现run方法 * 3.创建一个实现类的实例 * 4.创建Thread实例,将实现类的实例作为参数传入 * 5.调用start方法,启动线程并运行run方法 */ class MyDemo implements Runnable{ @Override public void run() { for (int i = 1; i <= 50; i+

JavaScript--基于对象的脚本语言学习笔记(三)

事件处理器 1.一个数据校验表单的例程 <html> <head> <title>js练习</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <script type="text/javascript"> String.prototype.trim=function(){ r

Python学习笔记_Python对象

Python学习笔记_Python对象 Python对象 标准类型 其他内建类型 类型对象和type类型对象 Python的Null对象None 标准类型操作符 对象值的比较 对象身份比较 布尔类型 标准类型的内建函数 typeObj cmpobj1 obj2 strobj reprobj typeobj isinstanceobj 标准类型的分类 存储模型 更新模型 访问模型 不支持的类型 Python学习笔记_Python对象 首先来理解一个通俗的含义,什么是对象?其实对象无论在什么语言里面

Spring Batch学习笔记二

此系列博客皆为学习Spring Batch时的一些笔记: Spring Batch的架构 一个Batch Job是指一系列有序的Step的集合,它们作为预定义流程的一部分而被执行: Step代表一个自定义的工作单元,它是Job的主要构件块:每一个Step由三部分组成:ItemReader.ItemProcessor.ItemWriter:这三个部分将执行在每一条被处理的记录上,ItemReader读取每一条记录,然后传递给ItemProcessor处理,最后交给ItemWriter做持久化:It

python 学习笔记 三 字典

字典 Python的高效的key/value哈希表结构叫做"dict", dict的内容可以写成一系列的key:value对并放入{ }中, 相当于: dict = {key1:value1, key2:value2, ...}, 一个空的字典就是俩个大括号{ }. 下面是从一个空字典创建字典以及一些关键点: 数字, 字符串和元组可以作为字典的key, value可以是任何类型(包括字典). ## Can build up a dict by starting with the the

【Unity 3D】学习笔记三十七:物理引擎——碰撞与休眠

碰撞与休眠 上一篇笔记说过,当给予游戏对象刚体这个组件以后,那么这个组件将存在碰撞的可能性.一旦刚体开始运动,那么系统方法便会监视刚体的碰撞状态.一般刚体的碰撞分为三种:进入碰撞,碰撞中,和碰撞结束.关于休眠可以理解成为让游戏对象变成静止状态.如果给某个游戏对象休眠的状态,那么这个物体将立马静止,不再运动. 碰撞 首先学习下碰撞几个重要的方法: OnCollisionEnter(  ):刚体开始接触的时候,立即调用. OnCollisionStay(  ):碰撞过程中,每帧都会调用此方法,直到撞

Oracle学习笔记三 SQL命令

SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)               下面是这四种SQL语言的详细笔记: Oracle学习笔记三 SQL命令(二):SQL操作语言类别 Oracle数据类型 创建表时,必须为各个列指定数据类型 以下是 Oracle 数据类型的类别: 字符数据类型 CHAR类型 当需要固定长度的字符串时,使用 CHAR 数据类型. CHAR 数据类型存储字母数字值. CH