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

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. amazeui中内置的web组件有哪些且如何用

    amazeui中内置的web组件有哪些且如何用 一.总结 一句话总结: 1.组件还是jquery.js+amazeui.js,和插件一样,准确的说是amazeui.css+jquery.js+amaz ...

  2. echarts多条折线图和柱状图实现

    参考链接:echarts官网:http://echarts.baidu.com/原型图(效果图): 图片.png 代码: <!DOCTYPE html> <html> < ...

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

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

  4. Mapreduce 订单分组案例

    程序执行流程如下: map()-->getPartition()分区--->write()(序列化,每一行都顺序执行这三个方法)--->readFields()---->com ...

  5. Multiple address space mapping technique for shared memory wherein a processor operates a fault handling routine upon a translator miss

    Virtual addresses from multiple address spaces are translated to real addresses in main memory by ge ...

  6. windows 10 常用快捷键

    alt + space:最大.最小.关闭: 多屏互动:win+p 仅此电脑屏幕:复制:拓展:仅第二屏幕: 0. 不同于之前版本的变化 切换输入法:shift + alt: win + space: w ...

  7. 两个QWidget叠加,可部分代替layout的功能

    在QT开发过程中,有时候会遇到这样的问题,当我们自己创建了一个Layout对象以后,使用QWidget的setLayout方法,将这个Layout对象应用到窗口中的时候,发现窗口上没有我们添加的控件, ...

  8. 简明Python3教程 18.下一步是什么

    如果你有认真通读本书之前的内容并且实践其中包含的大量例程,那么你现在一定可以熟练使用python了. 同时你可能也编写了一些程序用于验证python特性并提高你的python技能.如果还没有这样做的话 ...

  9. ASP.NET Core Razor 布局视图 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Razor 布局视图 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 布局视图 上一章节中我们学习了如何使用 EF ...

  10. ASP.NET Core 静态文件 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 静态文件 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 静态文件 前几章节中,我们学习了 ASP.NET Core 的中间件 ...