多数情况下,容器会根据对象定义中的type属性值去直接调用相应类型的某个构造器。另外,还可以调用工厂方法来创建对象。(Spring.net中文手册)

实例参考。

(1)       Order类

namespace IocTest.Entities

{

public class Order

{

public int Unid { get; set; }

public string OrderName { get; set; }

public string UserId { get; set; }

public override string ToString()

{

return OrderName + ":" + Unid;

}

}

}

(一)   构造器

使用构造器时,不要求对象的特定类型,只要声明对象的类型(assembly)就可以了。方法如下:

1.指明对象类型 type="类全名,程序集名"

2.有一个无参的构造函数或者默认构造函数。

①Xml

<object id="orderConstructor" type="IocTest.Entities.Order"></object>

②Test

[Test(Description="constructor test")]

public void TestOrderConstructor()

{

Order oo = XmlFactory.GetObject("orderConstructor") as Order;

oo.OrderName = "constructor create Test order name";

Console.WriteLine(oo.ToString());

}

(二)   静态工厂

使用静态工厂方法创建对象时,除了要将对象定义的type属性设为包含静态工厂方法的类型外,还要设置一个名为factory-method的属性来指定静态工厂方法的名称。(Spring.net中文手册)

①     Xml

<!-- static facotry order-->

<object id="OrderFactoryStatic" type="IocTest.Entities.OrderFactory"

factory-method="CreateStaticInstance">

</object>

此对象type指定的是静态工厂类型,此对象的作用即为静态创建Order类

②     OrderFactory类

namespace IocTest.Entities

{

public class OrderFactory

{

public static Order CreateStaticInstance()

{

return new Order();

}

public Order CreateInstance()

{

return new Order();

}

}

}

③     Test

[Test(Description="static factory")]

public void TestStaticFactory()

{

Order oo = XmlFactory.GetObject("OrderFactoryStatic") as Order;

oo.OrderName = "static factory create Test order name";

Console.WriteLine(oo.ToString());

}

(三)   实例工厂

通过实例工厂方法创建对象与通过静态工厂方法创建对象的配置方式类似。此时,实例工厂方法所在的对象必须也要配置在同一容器(或父容器)中。

如果要通过实例工厂方法创建对象,对象定义就不能包含type属性,而要用factory-object属性引用工厂方法所在的对象;注意,该属性值必须是包含工厂方法的对象的名称,且该对象必须定义在当前容器或父容器中。工厂方法的方法名则通过factory-method属性指定。(Spring.net中文手册)

①     Xml

<!-- factory order instance-->

<object id="OrderFactorySample" type="IocTest.Entities.OrderFactory">

</object>

<object id="OrderFactoryInstance"  type="IocTest.Entities.OrderFactory"

factory-method="CreateInstance"

factory-object="OrderFactorySample">

</object>

②     Test

[Test(Description = "instance factory test")]

public void TestInstanceFactory()

{

Order oo = XmlFactory.GetObject("OrderFactoryInstance") as Order;

oo.OrderName = "instance factory create Test order name";

Console.WriteLine(oo.ToString());

}

(四)   泛型类型

与普通对象相同。但要注意的是左尖括号要以&lt;来代替,右尖括号不用。

Score<T> 类

namespace IocTest.Entities

{

public class Score<T>

{

public int Unid { get; set; }

public List<T> ScoreList { get; set; }

public override string ToString()

{

string strReturn = string.Empty;

foreach (T t in ScoreList)

strReturn += t.ToString();

return strReturn;

}

}

}

①     Xml

<!--generic test-->

<object id="Score" type="IocTest.Entities.Score&lt;int>">

</object>

②     Test

[Test]

public void TestGenericScore()

{

Score<int> cc=XmlFactory.GetObject("Score") as Score<int>;

List<int> _list = new List<int>() { 11,2,66,9,0};

cc.ScoreList = _list;

Console.WriteLine(cc.ToString());

}

spring.net 对象创建 几种情况相关推荐

  1. spring注入对象的几种方式

    写在前面 spring通过IOC容器帮我们管理了对象,但是管理的这些对象,当我们需要其中一个或者是多个的时候应该怎么样获取呢,这就和对象注入有关系了,通过注入,我们可以从spring容器中反向被动的获 ...

  2. spring配置详解-三种对象创建方式_

    新建一个包,b_create,关于Spring创建对象的方式,咱们首先先介绍默认方式,我复制一个配置文件过来,在这个包下创建一个配置文件,把这些注释可以删掉了,现在咱们看到的情况,是常见的情况,这种情 ...

  3. java 给对象创建实例_Java中创建(实例化)对象的五种方式

    Java中创建(实例化)对象的五种方式1.用new语句创建对象,这是最常见的创建对象的方法. 2.通过工厂方法返回对象,如:String str = String.valueOf(23); 3.运用反 ...

  4. 补充spring事务传播性没有考虑的几种情况

    spring传播机制的讲解参考: https://segmentfault.com/a/1190000013341344#articleHeader3 http://blog.51cto.com/ja ...

  5. 创建函数查找上级_一文秒懂JavaScript中对象的7种创建方式

    1.工厂模式 javascript 代码 工厂模式:能根据接受的参数来创建出一个person对象.也可以无数次的调用这个函数,每次都会返回一个包含3个属性和1个方法的对象. 工厂模式虽然解决了创建多个 ...

  6. maven web项目导入sts_Spring Boot2 系列教程(二)创建 Spring Boot 项目的三种方式

    我最早是 2016 年底开始写 Spring Boot 相关的博客,当时使用的版本还是 1.4.x ,文章发表在 CSDN 上,阅读量最大的一篇有 43W+,如下图: 2017 年由于种种原因,就没有 ...

  7. 【Spring 基础注解】对象创建相关注解、注入相关注解、注解扫描详解

    Spring 基础注解(2.x) 注解基础概念 注解的作用 Spring 注解的发展历程 对象创建相关注解 @Component @Repository.@Service.@Contoller @Sc ...

  8. Spring的初始化和对象创建流程

    Spring容器的初始化和对象创建流程(代码方面): 如图: 1.Spring容器初始化流程: 文字说明: 在ClassPathXmlApplicationContext的构造函数中: super(p ...

  9. Spring Data JPA-JPA对象的四种状态

    Spring Data JPA-JPA对象的四种状态 JPA对象的四种状态 临时状态:刚创建出来,∙没有与EntityManager发生关系,没有被持久化,不处于EntityManager中的对象.实 ...

最新文章

  1. 2013\Province_Java_A\1.世纪末的星期
  2. 软件工程中的所有内聚类型【吐血整理,附带排名!】
  3. lightroom预设使用_在Lightroom中使用全景图增强照片游戏
  4. myeclipse+git pull项目报错
  5. mysql 查询空字符串 设置默认值_MySQL默认值选型是空,还是 NULL-爱可生
  6. 电视光端机常见故障问题介绍
  7. X86逆向教程10:学会使用硬件断点
  8. java中匿名类的注意细节
  9. 忽然感觉公司的工作环境有污染,墙壁和地面会散发异味,时间长了会头疼。...
  10. 【车间调度】基于matlab鸟群算法求解车间调度问题【含Matlab源码 1395期】
  11. 初学者之如何快速获取微信小程序源码
  12. 开源项目zheng学习
  13. 输入框技巧 禁用输入法 禁用提示 提示归类
  14. YOLO train.txt创建
  15. WINRAR的破解方法
  16. wr885n 虚拟服务器,TP-Link TL-WR885N V1-V3路由器桥接设置教程 | 192路由网
  17. js获取随机数与随机颜色函数的简单封装
  18. 大型智慧灌区信息化管理系统云平台 智慧灌区信息化管理系统解决方案
  19. BG22蓝牙——第四弹 联调单片机,蓝牙点灯Demo
  20. c语言 绘制任意斜率的直线,绘制任意斜率的直线

热门文章

  1. 自动机器学习工具全景图:精选22种框架,解放炼丹师
  2. Quoc Le,谷歌AutoML的幕后英雄
  3. 谷歌与军方合作新料:决定AI不用于武器前,还想帮军方搜集情报
  4. 谍照曝光!特斯拉正在测试完全自动驾驶
  5. 【Samshing专栏】动态等待符的实践指南
  6. bzoj千题计划259:bzoj3122: [Sdoi2013]随机数生成器
  7. CREELINKS平台_处理器CeAd资源使用说明(CeAd的配置与使用)
  8. 这行简单的网址可令Chrome立马崩溃
  9. TensorFlow教程之API DOC 6.3.10. NN
  10. Atom 和 Sublime Text 相比哪个好?