这篇主要说对象的创建方式。

spring.net提供了三种创建对象的方式,分别是构造器创建,静态工厂创建,实例工厂创建。

多数的情况下,容器会根据对象定义中type属性值去直接调用相应类型的某个构造器,

另外,容器也可以调用工厂方法来创建对象,这时的type属性的值就应该是包含工厂方法的类型。

一、通过构造器创建对象

通过构造器创建对象需要满足一定的条件,

1.指明对象类型type=“类全名,类所在程序集名”/

2.有一个无参的构造函数(依赖注入的时候需要外部可以调用构造函数)。

<object name="person" type="LINQDemo.person,LINQDemo"> </object>

IApplicationContext ctx = ContextRegistry.GetContext();

person stu = ctx.GetObject("person") as person;

二、静态工厂创建

使用静态工厂创建需要配置factory-method属性,用factory-method属性来指定方法名。

配置
<object id="staticFactory"
type="LINQDemo.staticFactory,LINQDemo"
factory-method="getObject">
<property name="name" value="小爱"></property>
<property name="id" value="2"></property> </object>

静态工厂方法
static public object getObject()
{
return new student();
}

调用
IApplicationContext ctx = ContextRegistry.GetContext(); student stu = ctx.GetObject("staticFactory") as student;

三、实例工厂创建对象

使用实例工厂创建对象需要先定义一个工厂,然后设置factory-object和factory属性,

却满足实例工厂方法所在的对象必须也配置在同一容器或夫容器中,对象的定义不能再

包含type属性。

配置

为实例工厂类配置
<object id="instance" type="LINQDemo.instanceFactory,LINQDemo"></object> 配置实例工厂生成的对象
<object id="instanceFactory"
factory-object="instance"
factory-method="getObject"
>
<property name="name" value="小艾"></property>
<property name="id" value="3"></property> </object> 实例工厂类
public object getObject()
{ return new student();
} 调用
IApplicationContext ctx = ContextRegistry.GetContext(); student stu = ctx.GetObject("instanceFactory") as student;

  

补充:

关于id和name的使用,官网中文文档是这样解释的:

每个对象都有一个或多个id(就是所谓的标识符或名称,这些术语的含义是相同的)。id在容器中应该是唯一的。一个对象通常只有一个标识符,如果指定了一个以上名称,其余的就会被认为是别名。

在XML对象定义中,用id或者name属性来定义对象的标识符。每个对象都需要用id或name属性定义至少一个标识符。id属性允许为对象定义指定一个唯一的id,因为在Spring.NET的shcema文档中,id被标识为XML元素的ID属性,XML解析器可以在其它元素引用它的时候进行验证,在配置对象标识符时,应该优先使用id属性。但是,id属性值不能包含任何XML ID不允许使用的字符。如果一定要使用这些字符,应该使用name属性,在name属性中也可以通过逗号或分号为对象指定一个或多个别名。

spring.net的简单使用(三)创建对象的更多相关文章

  1. Spring Data JPA教程, 第三部分: Custom Queries with Query Methods(翻译)

    在本人的Spring Data JPA教程的第二部分描述了如何用Spring Data JPA创建一个简单的CRUD应用,本博文将描述如何在Spring Data JPA中使用query方法创建自定义 ...

  2. Java Spring Boot VS .NetCore (三)Ioc容器处理

    Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...

  3. spring事务详解(三)源码详解

    系列目录 spring事务详解(一)初探事务 spring事务详解(二)简单样例 spring事务详解(三)源码详解 spring事务详解(四)测试验证 spring事务详解(五)总结提高 一.引子 ...

  4. Spring Boot项目简单上手+swagger配置+项目发布(可能是史上最详细的)

    Spring Boot项目简单上手+swagger配置 1.项目实践 项目结构图 项目整体分为四部分:1.source code 2.sql-mapper 3.application.properti ...

  5. Spring MVC之简单入门

    一.Spring MVC简介: 1.什么是MVC 模型-视图-控制器(MVC)是一个众所周知的以设计界面应用程序为基础的设计模式.它主要通过分离模型(Model).视图(View)及控制器(Contr ...

  6. 《Spring Cloud》学习(三) 容错保护!

    在微服务架构中,我们将系统拆分成了很多服务单元,各单元的应用间互相依赖.由于每个单元都在不同的进程中运行,依赖通过远程调用的方式执行,这样就有可能因为网络原因或是依赖服务自身间题出现调用故障或延迟,而 ...

  7. Spring Boot Mybatis简单使用

    Spring Boot Mybatis简单使用 步骤说明 build.gradle:依赖添加 application.properties:配置添加 代码编写 测试 build.gradle:依赖添加 ...

  8. Spring Security4.X 简单实例介绍

    简介 本例子采用的是SpringMVC.SpringSecurity和Spring整合的简单使用 使用gradle搭建的项目(gradle比maven更加便捷),可以自行了解 web.xml配置 &l ...

  9. 使用Spring缓存的简单Demo

    使用Spring缓存的简单Demo 1. 首先创建Maven工程,在Pom中配置 <dependency> <groupId>org.springframework</g ...

  10. Spring依赖注入 --- 简单使用说明

    Spring依赖注入 --- 简单使用说明 本文将对spring依赖注入的使用做简单的说明,enjoy your time! 1.使用Spring提供的依赖注入 对spring依赖注入的实现方法感兴趣 ...

随机推荐

  1. Web开发标配--开发人员工具-JS调试

    喜欢从业的专注,七分学习的态度. JS:全称JavaScript,Web中,js主要在两个地方: html的<script type="text/javascript"> ...

  2. 【最大M子段和】dp + 滚动数组

    题目描述 给定 n 个数求这 n 个数划分成互不相交的 m 段的最大 m 子段和. 给出一段整数序列 A1,A2,A3,A4,...,Ax,...,An ,其中 1≤x≤n≤1,000,000, -3 ...

  3. sparksql 动态设置schema将rdd转换成dataset/dataframe

    java public class DynamicDemo { private static SparkConf conf = new SparkConf().setAppName("dyn ...

  4. 【心情】2016ICPC青岛站打铁记

    Day0 下午到的青岛; 然后就在下面这两个地方转了很久:一直找不到公交站台 路上还看到了一个类似堡垒的东西:感觉屌屌的. 然后在落日的余晖下:我们找到了公交站台; 路上不知道他们在讨论什么:GPS什 ...

  5. 左右Cwnd::Create()功能出现afxwin1.inl line:21错误的解决方案

    我最近在调试dll时刻,有一种模糊的断言错误,它是由主程序创建MFC 扩张DLL控制出口(从控制继承CWnd分类)时刻,呼叫Create()下列说法错误的功能: watermark/2/text/aH ...

  6. 关于MOVE 和 CopyMemory 的用法区别

    最近做了一个数据采集服务器, 根据程序的框架,使用了大量的指针结构体(内存块) 操作. 例子: PArrayByte = ^TArrayByte;  TArrayByte = packed recor ...

  7. Delphi2010,DelphiXE 安装控件找不到DesignIntf 解决办法

    今天安装了一个可以支持IP 地址输入的edit控件,安装后可以放到窗体上,但是编译提示找不到DesignIntf,DesignEditors 从Delphi6开始,就对DesignIntf,Desig ...

  8. 树莓派挂载移动硬盘开启samba

    本文参考 [https://blog.csdn.net/u010906068/article/details/38455363],原文部分步骤在我的树莓派上,可能是版本不同吧,进行了修改后部署成功 一 ...

  9. 设置Oracle tnslsnr监听器口令

    绿盟扫描提示引用程序脆弱账号  Oracle tnslsnr 监听器,加密主要为了防止监听被恶意远程关闭.关于这个安全问题的详细说明参见文字结尾转载的说明<Oracle的监听口令及监听器安全&g ...

  10. Arcgis api for javascript学习笔记(3.2X版本)-初步尝试

    Arcgis api for javascript(3.22版本)官方地址 :https://developers.arcgis.com/javascript/3/ 1. 根据官方示例实现一个简单地图 ...