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对象的时候(被依赖的对象)的方法时.曾经我们的做法是怎么做呢?主动的去创建 ...
随机推荐
- SpringMvc+Mybatis+Maven+Mysql做一个CRUD的简单例子
本文档结合 SpringMVC. Mybatis. MySQL,说明如何实现一个简单的数据库单表 CRUD操作.开发工具使用集成了spring mvc的eclipse(Spring Tool Suit ...
- angular default project (angular.json的解读)
Change the default Angular project Understanding it's purpose and limits Klaus KazlauskasFollow Nov ...
- 微软BI 之SSIS 系列 - 通过 ROW_NUMBER 或 Script Component 为数据流输出添加行号的方法
开篇介绍 上午在天善回答看到这个问题 - SSIS 导出数据文件,能否在第一列增加一个行号,很快就帮助解决了,方法就是在 SQL 查询的时候加一个 ROW_NUMBER() 就可以了. 后来想起在两年 ...
- windows和linux文件输 - ftp
1. linux到linux的复制直接用scp命令 但是windows下就麻烦点, 安装winscp, 配置用户名和密码即可随意拖拽了. 下载地址: 需要linux电脑的用户名和密码即可 2. win ...
- C#中Invoke的用法2
在用.NET Framework框架的WinForm构建GUI程序界面时,如果要在控件的事件响应函数中改变控件的状态,例如:某个按钮上的文本原先叫“打开”,单击之后按钮上的文本显示“关闭”,初学者往往 ...
- Lintcode 730 所有子集的和
已知: 给一整数 n, 我们需要求前n个自然数形成的集合的所有可能子集中所有元素的和. 示例: 给出 n = , 返回 可能的子集为 {{}, {}, {, }}. 子集的元素和为 + + + = 给 ...
- Mocks Aren't Stubs
Mocks Aren't Stubs The term 'Mock Objects' has become a popular one to describe special case objects ...
- 物联网架构成长之路(4)-EMQ插件创建
1. 说明 以下用到的知识,是建立在我目前所知道的知识领域,以后如果随着知识的拓展,不一定会更新内容.由于不是EMQ公司的人,EMQ的文档又很少,很多知识点都是靠猜的.2. 一些资料 架构设计 htt ...
- epoll的由来
reference https://www.zhihu.com/question/20122137 感谢 @静海听风 @蓝形参 数据流有两个重要的参与者: 1.往流中写入数据者 2.从流中读取数据者 ...
- [APM] OneAPM 云监控部署与试用体验
摘要: 作为 Zabbix 骨灰级粉丝,一直以来对第三方监控(APM)都是拒绝的.一来觉得收费,二来担心数据被人所知,三来觉得 Zabbix 牛逼到无可取代.但是,随着 APM 市场的火爆,我决定「放 ...