Spring.NET依赖注入框架学习--简单对象注入
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依赖注入框架学习--简单对象注入的更多相关文章
- Spring.NET依赖注入框架学习--实例化容器常用方法
Spring.NET依赖注入框架学习---实例化容器常用方法 本篇学习实例化Spring.NET容器的俩种方式 1.通过XmlObjectFactory创建一个Spring.NET容器 IResour ...
- Spring.NET依赖注入框架学习--简介
Spring.NET依赖注入框架学习--Spring.NET简介 概述 Spring.NET是一个应用程序框架,其目的是协助开发人员创建企业级的.NET应用程序.它提供了很多方面的功能,比如依赖注入. ...
- Spring.NET依赖注入框架学习--入门
Spring.NET依赖注入框架学习--入门 在学些Spring.net框架之前,有必要先脑补一点知识,比如什么是依赖注入?IOC又是什么?控制反转又是什么意思?它们与Spring.net又有什么关系 ...
- Spring.NET依赖注入框架学习-- 泛型对象的创建和使用
Spring.NET依赖注入框架学习-- 泛型对象的创建和使用 泛型对象的创建方法和普通对象是一样的. 通过构造器创建泛型对象 下面是一个泛型类的代码: namespace GenericsPlay ...
- 安全测试===Mysql 注入技巧学习 MySQL注入技巧(1)
默认存在的数据库: mysql 需要root权限读取 information_schema 在5以上的版本中存在 测试是否存在注入方法 假:表示查询是错误的 (MySQL 报错/返回页面与原来不同) ...
- 安全测试===Mysql 注入技巧学习 MySQL注入技巧(2)
原文地址:http://websec.files.wordpress.com/2010/11/sqli2.pdf 0x00.介绍 也可以参考瞌腄龙的mysql注入科普:http://drops.woo ...
- Spring+SpringMVC+MyBatis+Redis框架学习笔记
在Java互联网中,以Spring+Spring MVC+MyBatis (SSM) 作为主流框架. SSM+Redis的结构图 在这种框架系统中: Spring IoC 承担了一个资源管理.整合.即 ...
- Spring框架学习之依赖注入
Spring框架从2004年发布的第一个版本以来,如今已经迭代到5.x,逐渐成为JavaEE开发中必不可少的框架之一,也有人称它为Java下的第一开源平台.单从Spring的本身来说,它贯穿着整个表现 ...
- 码农小汪-spring框架学习之2-spring IoC and Beans 控制反转 依赖注入 ApplicationContext BeanFactory
spring Ioc依赖注入控制反转 事实上这个东西很好理解的,并非那么的复杂. 当某个Java对象,须要调用还有一个Java对象的时候(被依赖的对象)的方法时.曾经我们的做法是怎么做呢?主动的去创建 ...
随机推荐
- android: 接收系统广播
Android 内置了很多系统级别的广播,我们可以在应用程序中通过监听这些广播来得到 各种系统的状态信息.比如手机开机完成后会发出一条广播,电池的电量发生变化会发出一 条广播,时间或时区发生改变也会发 ...
- 详解Paint的setColorFilter(ColorFilter filter)
一.简介 setColorFilter(ColorFilter filter) 设置颜色过滤,这个方法需要我们传入一个ColorFilter参数同样也会返回一个ColorFilter实例.我们在set ...
- 深入理解 Java try-with-resource 语法糖
背景 众所周知,所有被打开的系统资源,比如流.文件或者Socket连接等,都需要被开发者手动关闭,否则随着程序的不断运行,资源泄露将会累积成重大的生产事故. 在Java的江湖中,存在着一种名为fina ...
- iOS:用Block写一个链式编程
一.介绍 链式编程是一个比较新颖的编程方式,简单直观,用起来也比较舒服.目前比较有名的Mansory和BabyBlueTooth就是使用链式编程写的第三方框架. 二.写法 链式编程写法不同于传统方式, ...
- wcstombs_s 宽字节转多字节
// crt_wcstombs_s.c // This example converts a wide character // string to a multibyte character str ...
- cmake mac 安装
Cmake 在mac上的安装 cmake 官网:https://cmake.org/ 以源码方式安装 1. 下载源码:https://cmake.org/files/v3.9/cmake-3.9.0- ...
- 【PMP】项目采购管理~重点知识
1.合同的类型与区别 固定总价(FFP):大多数买方都喜欢这种合同,因为货物的采购价格在一开始就已确定,并且不允许改变(除非工作范围发生变更) 总价加激励费用(FPIF):这种总价合同给买方和卖方提供 ...
- 廉价的SUP掌机拆解
最近经常出现的一款山寨sup掌机, 75元包邮入手, 全套配件如下. 看看正面和背面的实拍图, 比较明显的廉价玩具塑料感. 手柄和充电线共用下方的microUSB口, 所以在双打时是不能用电源供电的. ...
- 基于Centos搭建Laravel 环境搭建
系统要求:CentOS 7.2 64 位操作系统 安装 Laravel Laravel 简介 Laravel 是一套简洁.优雅的 PHP Web 开发框架.它可以让你从面条一样杂乱的代码中解脱出来:它 ...
- iOS开发之Xcode9报错 Compiling IB documents for earlier than iOS7 is no longer supported.
升级到Xcode9时,最低的编译版本为iOS8,但是在使用一些SDK的时候就会报出Compiling IB documents for earlier than iOS7 is no longer s ...