Spring.NET依赖注入框架学习--简单对象注入

在前面的俩篇中讲解了依赖注入的概念以及Spring.NET框架的核心模块介绍,今天就要看看怎么来使用Spring.NET实现一个简单的对象注入

常用文件

我们使用Spring.Net 框架经常要使用到的是以下文件:

  • Common.Logging.dll  包含了Spring.Net日志方面的功能(必须)
  • Spring.Core.dll       包含了Spring.Net 的核心库(必须)
  • Spring.Data.dll       包含了Spring.Net 的数据访问功能
  • Spring.Aop. dll       包含了Spring.Net 对面向切面编程(AOP)的支持
  • Spring.Web.dll       包含了Spring.Net 对ASP.NET进行了一系列功能扩展

Spring.NET常用接口

 IObjectFactory和IApplicationContext

IObjectFactory接口提供了一种高级配置机制,可以管理任何类型的对象,提供了配置框架和基本功能。

IApplicationContext是IObjectFactory的子接口,表示Spring IoC容器,负责在应用程序中实例化,配置和组装许多对象。容器通过读取配置元数据获取对象的实例化,配置和组装。配置元数据以XML表示。它增加了与Spring.NET面向方面编程(AOP)功能,消息资源处理(用于国际化),事件传播和Web应用程序上下文(如Web应用程序上下文)在Web应用程序中使用的更容易的集成,IApplicationContext增加了更多的企业特定功能。 IApplicationContext是IObjectFactory的一个完整的超集。

Spring.NET提供了几个IApplicationContext接口的实现。在独立的应用程序中,通常在应用程序的App.config文件中以编程方式或声明方式创建XmlApplicationContext的实例。

在Web应用程序中,Spring提供了一个WebApplicationContext实现,该实现通过在Web.config文件中添加自定义HTTP模块和HTTP处理程序来配置

下图是Spring.NET的工作原理图

如上图所示,Spring.NET IoC容器使用一种形式的配置元数据;这个配置元数据表示作为应用程序开发人员如何告诉Spring容器在应用程序中实例化,配置和组装对象。配置元数据以简单直观的XML格式提供

Spring.Net 的配置介绍

Spring.Net 的配置文件(一般情况下加入到App.Config或者Web.Config中)内容如下都是XML文件格式

配置文件中必须要要具有的节点

spring结点

spring结点 方式一

<spring>
<context type="Spring.Context.Support.XmlApplicationContext, Spring.Core">
<resource uri="file://objects.xml"/>
<resource uri="assembly://MyAssembly/MyProject/objects-dal-layer.xml"/>
</context>
</spring>

spring结点 方式二

<spring>
<context>
<resource uri="file://objects.xml"/>
<resource uri="assembly://MyAssembly/MyProject/objects-dal-layer.xml"/>
</context>
</spring>

<context>节点的type属性是可选的,在Windows应用中,其默认值就是Spring.Context.Support.XmlApplicationContext,所以方式一和方式二完全相同

spring和context节点的名称不是任意的,必须是"spring"和"context",Spring.NET本身将"spring/context"作为字符串常量定义在了AbstractApplicationContext类中以表示上下文的节点名称所以这个结点名称是不能随便改的,若要引用由以上配置创建的容器,可使用下面的代码:

IApplicationContext ctx = ContextRegistry.GetContext();

ContextRegistry类既可用来初始化应用程序上下文,也可用来以服务定位器风格对容器中的对象进行访问,注意,使这一切成为可能的是Spring.Context.Support.ContextHandler类,该类实现了FCL的IConfigurationSectionHandler接口。必须在.NET配置文件的<configSections>节点中注册这个类,注册了这个节点处理器后,配置文件中的<spring>节点才能起作用,如下所示:

configSections结点

<configSections>
<sectionGroup name="spring">
<section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
</sectionGroup>
</configSections>

源数据对象xml文件格式

<objects xmlns="http://www.springframework.net">
<object id="..." type="...">
<!-- collaborators and configuration for this object go here -->
</object>
<object id="...." type="...">
<!-- collaborators and configuration for this object go here -->
</object>
<!-- more object definitions go here -->
</objects>

id属性是用来标识单个对象定义的字符串。 type属性定义对象的类型,并使用完全限定的类型名称,包括程序集名称。

  <object id="对象名称" type="命名空间.类名,程序集名称">
//对象成员
</object>

实例介绍

Person.cs

/*****************************************************
* ProjectName: Spring.NET01
* Description:
* ClassName: Person
* CLRVersion: 4.0.30319.42000
* Author: JiYF
* NameSpace: Spring.NET01
* MachineName: JIYF_PC
* CreateTime: 2018/1/14 11:59:12
* UpdatedTime: 2018/1/14 11:59:12
*****************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Spring.NET01
{
public class Person
{
public Person()
{ }
~Person()
{ }
public void print()
{
Console.WriteLine("我是一个Person对象");
}
}
}

根据配置文件格式我们配置一个Person对象

App.config文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="spring">
<section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core" />
<section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
</sectionGroup>
</configSections>
<spring>
<context>
<!--元数据对象的来源-->
<resource uri="config://spring/objects"></resource>
</context>
<objects xmlns="http://www.springframework.net">
<!--一个person对象-->
<object id="person1" type="Spring.NET01.Person,Spring.NET01"> </object>
</objects> </spring>
</configuration>

通过Sprint.NET容器注入对象

第一步引用Spring.NET动态库文件,这里只需要引用Spring.Core.dll 和Common.Logging.dll动态库文件即可

代码测试:

    class Program
{
static void Main(string[] args)
{
//普通对象创建
Person person = new Person();
person.print(); //通过Spring.NET ioc注入对象
IApplicationContext ctx = ContextRegistry.GetContext();
Person bennanhai = (Person)ctx.GetObject("person1");
bennanhai.print(); Console.Read();
}
}

执行结果:

这样一个简单的依赖注入例子就实现了

源代码工程下载

Spring.NET依赖注入框架学习--简单对象注入的更多相关文章

  1. Spring.NET依赖注入框架学习--实例化容器常用方法

    Spring.NET依赖注入框架学习---实例化容器常用方法 本篇学习实例化Spring.NET容器的俩种方式 1.通过XmlObjectFactory创建一个Spring.NET容器 IResour ...

  2. Spring.NET依赖注入框架学习--简介

    Spring.NET依赖注入框架学习--Spring.NET简介 概述 Spring.NET是一个应用程序框架,其目的是协助开发人员创建企业级的.NET应用程序.它提供了很多方面的功能,比如依赖注入. ...

  3. Spring.NET依赖注入框架学习--入门

    Spring.NET依赖注入框架学习--入门 在学些Spring.net框架之前,有必要先脑补一点知识,比如什么是依赖注入?IOC又是什么?控制反转又是什么意思?它们与Spring.net又有什么关系 ...

  4. Spring.NET依赖注入框架学习-- 泛型对象的创建和使用

    Spring.NET依赖注入框架学习-- 泛型对象的创建和使用 泛型对象的创建方法和普通对象是一样的. 通过构造器创建泛型对象 下面是一个泛型类的代码: namespace GenericsPlay ...

  5. 安全测试===Mysql 注入技巧学习 MySQL注入技巧(1)

    默认存在的数据库: mysql 需要root权限读取 information_schema 在5以上的版本中存在 测试是否存在注入方法 假:表示查询是错误的 (MySQL 报错/返回页面与原来不同) ...

  6. 安全测试===Mysql 注入技巧学习 MySQL注入技巧(2)

    原文地址:http://websec.files.wordpress.com/2010/11/sqli2.pdf 0x00.介绍 也可以参考瞌腄龙的mysql注入科普:http://drops.woo ...

  7. Spring+SpringMVC+MyBatis+Redis框架学习笔记

    在Java互联网中,以Spring+Spring MVC+MyBatis (SSM) 作为主流框架. SSM+Redis的结构图 在这种框架系统中: Spring IoC 承担了一个资源管理.整合.即 ...

  8. Spring框架学习之依赖注入

    Spring框架从2004年发布的第一个版本以来,如今已经迭代到5.x,逐渐成为JavaEE开发中必不可少的框架之一,也有人称它为Java下的第一开源平台.单从Spring的本身来说,它贯穿着整个表现 ...

  9. 码农小汪-spring框架学习之2-spring IoC and Beans 控制反转 依赖注入 ApplicationContext BeanFactory

    spring Ioc依赖注入控制反转 事实上这个东西很好理解的,并非那么的复杂. 当某个Java对象,须要调用还有一个Java对象的时候(被依赖的对象)的方法时.曾经我们的做法是怎么做呢?主动的去创建 ...

随机推荐

  1. api日常总结

    异步加载JS和CSS <script type="text/javascript"> (function () { var s = document.createEle ...

  2. 解决IE9下交通银行网上银行无法输入密码的问题

    自系统升级到 Win 7以后,突然发现用 IE9 浏览器登陆交通银行网上银行时,始终不能正常 输入密码.原来,非要进行特别的设置才可.现记录如下: 1.没有交通银行安装安全输入控件,安装即可.   当 ...

  3. Jquery计算时间戳之间的差值,可返回年,月,日,小时等

    /** * 计算时间戳之间的差值 * @param startTime 开始时间戳 * @param endTime 结束时间戳 * @param type 返回指定类型差值(year, month, ...

  4. 正则匹配报文中的XML(HTML)标签,替换重新输出

    调用返回报文标签中的存在中划线“-”,不符合规范,需要统一进行转换,但不能替换标签内的内容,利用正则匹配重新输出 /** * 正则匹配报文中的xml标签,将其中的"-"转换为&qu ...

  5. B+树索引和哈希索引的区别[转]

    导读 在MySQL里常用的索引数据结构有B+树索引和哈希索引两种,我们来看下这两种索引数据结构的区别及其不同的应用建议. 二者区别 备注:先说下,在MySQL文档里,实际上是把B+树索引写成了BTRE ...

  6. css table样式

    1.table样式首先设置表格边框,属性设置表格的边框是否被合并为一个单一的边框. table{ border-collapse: collapse; border-spacing: 0;} 2.固定 ...

  7. ECMAScript 6 入门之Proxy代理和set

    1.Proxy代理 1. var user={ full_name:function () { return this.fname+" "+this.lname; } }; use ...

  8. pdf 移除密码 去除水印 批量去除水印 编辑文字 批量替换文字

    1.pdf除密码: http://pan.baidu.com/share/link?shareid=308194398&uk=370045712  2.去除水印:http://wenku.ba ...

  9. sql1032n sql6048n db2start启动不了 db2修改hostname

    今天下午把虚拟机上的linux的hostanme改掉了 结果启动DB2的时候发生了这样的错误 SQL6048N  A communication error occurred during START ...

  10. 跨控制器跳转view——RedirectToRoute和RedirectToAction

    已知控制器AccountController.cs和HomeController.cs,如果从页面Account/Login直接跳转到Home/Index,可以利用RedirectToRoute和Re ...