在前面一章我们介绍了依赖注入,控制反转的概念。接下来我们来真正动手搭建一下Spring.Net的环境,看一下Spring.Net 中的控制反转和依赖注入是什么样子。

3.1  Spring.Net 下载

  在Spring.Net的官方网站http://www.springframework.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进行了一系列功能扩展

3.2  Spring.Net 的配置介绍

  下载完Spring.Net相关文件后,我们要使用Spring.Net框架还需要进行一些简单的配置。

  Spring.Net 的配置文件(一般情况下加入到App.Config或者Web.Config中):

 1 <?xml version="1.0" encoding="utf-8" ?>
2 <configuration>
3 <configSections>
4 <sectionGroup name="spring">
5 <!--提供Spring对应用程序上下文的支持-->
6 <section name="context" type="Spring.Context.Support.ContextHandler,Spring.Core"/>
7 <!--提供Spring对 对象容器的支持-->
8 <section name="objects" type="Spring.Context.Support.DefaultSectionHandler,Spring.Core"/>
9 </sectionGroup>
10 </configSections>
11 <spring>
12 <context>
13 <!--Spring中 IOC容器 所使用的对象XML文件定义-->
14 <resource uri="assembly://CnblogLesson_3_2/CnblogLesson_3_2.Config/Objects.xml"/>
15 </context>
16 </spring>
17 </configuration>

Spring.Net 对象的配置文件:

1 <?xml version="1.0" encoding="utf-8" ?>
2 <objects xmlns="http://www.springframework.net">
3 <object id="readerDal" type="CnblogLesson_3_2.ReaderDAL,CnblogLesson_3_2">
4 </object>
5 </objects>

  在基于XML定义的对象中,<object>是一个节点,所有节点的父节点必须是<objects>,在<objects xmlns="http://www.springframework.net"> 的属性中xmlns是必须的。并且必须将XML设置为嵌入式资源,单击右键--》属性--》生成操作设置为嵌入的资源,否则Spring.Net 无法初始化Object。

3.3  开始搭建Spring.Net 的环境

  首先,我们仍然是先准备好Spring.Net 的相关文件,在这里我目前使用的是Spring.NET-1.3.2(由于文件有50多M,大家可以到各大网站去下载),然后打开Visual Studio,创建一个控制台项目。由于我现在使用的是.NetFramework 4.0, 所以我找到Spring.NET-1.3.2.zip\Spring.NET\bin\net\4.0\release下,将需要的文件引用到项目中。在这里,我为了方便就全部将常用的文件全部添加进项目了,并将这些文件添加引用。

  其次,我们需要添加Spring.Net 的配置文件以及Spring.Net 对象的配置文件(如:Config/Objects.xml),由于是控制台项目,这里就添加App.Config作为配置文件。3.2节已经给出Spring.Net 配置文件以及Spring.Net 对象的配置的写法。

  接下来,我们再添加代码文件。为了方便理解,举的例子依然是,第二章“获取博客园文章”的例子。除了ReaderService.cs的代码是使用Spring.Net 依赖注入方式来实现,其他的类都没有变化。

 1 using System;
2 using Spring.Context;
3 using Spring.Context.Support;
4 using Spring.Core.IO;
5 using Spring.Objects.Factory.Xml;
6 using Spring.Objects.Factory;
7
8 namespace CnblogLesson_3_3
9 {
10 /// <summary>
11 /// 读取文章的业务逻辑类
12 /// </summary>
13 public class ReaderService : IReaderService
14 {
15 /// <summary>
16 /// 读取文章的数据访问类对象
17 /// </summary>
18 private IReaderDAL dal;
19
20 public ReaderService()
21 {
22 /*是通过XmlObjectFactory或者是IApplicationContext来配置可以二者选其一*/
23
24 //或者是通过XmlObjectFactory配置
25 IResource input = new FileSystemResource("file:///C:/Objects.xml");
26 IObjectFactory factory = new XmlObjectFactory(input);
27 dal = (IReaderDAL)factory.GetObject("readerDal");
28
29 //通过IApplicationContext来配置
30 IApplicationContext context = ContextRegistry.GetContext();
31 dal = (IReaderDAL)context.GetObject("readerDal");
32 }
33
34 /// <summary>
35 /// 读者的名字
36 /// </summary>
37 private string Name { get; set; }
38
39 /// <summary>
40 /// 读取文章的方法
41 /// </summary>
42 public void GetArticle()
43 {
44 dal.GetArticle();
45 }
46 }
47 }

  添加Config/Objects.xml文件

  对象之间通常会相互协作,我们也可以说他们相互具有依赖性,Spring.Net 提供了一个接口IObjectFactory。我们通过IObjectFactory接口是初始化.配置以及管理对象的容器(它是所有容器的父接口)。

其中有三个重要的专有名词以下会做详细的解释: 对象,对象工厂,应用程序上下文。

1 <?xml version="1.0" encoding="utf-8" ?>
2 <objects xmlns="http://www.springframework.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
3
4 <object id="readerDal" type="CnblogLesson_3_3.ReaderDAL,CnblogLesson_3_3">
5
6 </object>
7
8 </objects>

  Object 就是配置文件中所配置的对象,前面一直说的对象,就是上面配置的readerDal。

  IObjectFactory接口为Spring.Net 提供了一种高级的配置机制来管理和维护对象。

  IApplicationContext接口则扩展了IObjectFactory,增加了面向切面编程 的功能和消息资源处理等功能。

  Spring.Objects.Factory.IObjectFactory有多个实现类,最常用的就是

  Spring.Objects.Factory.Xml.XmlObjectFactory,通过XmlObjectFactory 我们可以通过配置xml文件来定义和装配以及发布服务对象。

  简单的说,IObjectFactory接口提供了配置框架和基本功能,IApplicationContext接口又在其基础上扩展了许多企业级特性。可以说IApplicationContext是IObjectFactory的一个超集,具备IObjectFactory所有的功能与行为。

  上面这些话可能都太概念性了,接下来我们看一下在CnblogLesson_3_3中的示例,我们使用Spring.Objects.Factory.Xml.XmlObjectFactory来管理对象:

1 //或者是通过XmlObjectFactory配置
2 IResource input = new FileSystemResource("file:///C:/Objects.xml");
3 IObjectFactory factory = new XmlObjectFactory(input);
4 dal = (IReaderDAL)factory.GetObject("readerDal");

  其中,关于IResource接口,非常重要,我们稍后会有专门的章节一起来和大家讨论,我们现在,只需要知道它是读取资源的接口就行了。

  所谓的,

  对象:就是示例中的 CnblogLesson_3_3.ReaderDAL 类的实例。

  对象工厂:IObjectFactory对象的示例,由于new XmlObjectFactory(input);得到的就是一个对象工厂实例。

1 //通过IApplicationContext来配置
2 IApplicationContext context = ContextRegistry.GetContext();
3 dal = (IReaderDAL)context.GetObject("readerDal");

  其中,应用程序上下文: ContextRegistry.GetContext();创建出来的就是应用程序上下文。

  

  通过前面的示例我们可以看到通过Spring.Net降低了业务逻辑层与数据访问层的耦合,但是实际上并没有完全解决耦合,只是把耦合放到了Object.XML 文件中。通过一个容器在程序运行的时候才形成依赖关系,即把接口的实现动态注入到类中。我通常把这种IOC的模式,看成一个升级版本的工厂模式,把Spring.Net的IOC容器看成一个大工厂,只不过这个工厂产生的对象都是在外部XML文件定义的。

第三章 Spring.Net 环境准备和搭建的更多相关文章

  1. Groovy学习:第三章 Groovy开发环境

    本章将继续深入Groovy语言,首先学习Groovy脚本,包括从命令行编译和运行Groovy脚本,Groovy Shell,和Groovy Console.你将学会使用Groovy语言来建立域对象.控 ...

  2. 第三章 k8s cluster环境创建

    1  用如下方法安装指定版本的docker,但是我的环境会报错 # 安装rpm apt install rpm # 下载 RPM 包, docker 版本 wget https://download. ...

  3. 第三章:ionic环境搭建之windows篇

    下面是在windows操作系统上面安装ionic的步骤,已经在Windows 10/ 7/ XP下面通过验证. 安装JDK 1.1 下载(http://www.oracle.com/technetwo ...

  4. Python爬虫学习==>第三章:Redis环境配置

    学习目的: 学习非关系型数据库环境安装,为后续的分布式爬虫做基建 正式步骤 Step1:安装Redis 打开http://www.runoob.com/,搜索redis安装 打开搜索的内容,得到red ...

  5. 一、Spring MVC起步——IntelliJ IDEA 搭建Spring MVC环境(手把手搭建)

    本机环境: JDK 1.7 IntelliJ IDEA 2017.2 1.新建项目 Create New Project ​ 选择Spring MVC ​ 填写项目名和项目存放位置 ​ 然后点击Fin ...

  6. Spring企业级程序设计 • 【第5章 Spring MVC快速入门】

    全部章节   >>>> 本章目录 5.1 Spring MVC设计概述及其框架结构 5.1.1 Spring MVC介绍 5.1.1 Spring MVC优势 5.1.2  S ...

  7. IDEA搭建Spring框架环境

      一.spring 框架概念 spring 是众多开源 java 项目中的一员,基于分层的 javaEE 应用一站式轻量 级开源框架,主要核心是 Ioc(控制反转/依赖注入) 与 Aop(面向切面) ...

  8. MongoDB:搭建三节点 Replica Set 环境

    今天学习了搭建 MongDB 复制环境,实验环境是在虚拟机上同一系统,并搭建三节点 Replica Set,根据文档上的描述,mongodb 复制配置简单,并且能够自动 failover,这些高级特性 ...

  9. spring boot 笔记--第三章

    spring boot 笔记 第三章,使用Spring boot 构建系统: 强烈建议支持依赖管理的构建系统,Maven或Gradle 依赖管理: Spring Boot的每版本都会提供它支持的依赖列 ...

随机推荐

  1. Oracle中文字符乱码?设置Oracle客户端字符编码与服务端一致

    经常可能出现查询Oracle数据时,中文显示乱码,这很可能是因为,Oracle服务端的字符编码与客户端不一致引起的. 这时,我们需要做的是,如何设置自己的客户端字符编码与服务端一致. 查询Oracle ...

  2. Makefile学习之路——2

    让你的makefile更专业. 在上一个Makefile所在目录下通过touch命令创建一个clean文件,执行make clean,将发现make总是提示clean文件是最新的,而不是按我们期望的那 ...

  3. LeetCode103 BinaryTreeZigzagLevelOrderTraversal(二叉树Z形层次遍历) Java题解

    题目: Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from lef ...

  4. json demo

    package my.bigdata.movieTask.action; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.J ...

  5. PDNN中数据格式和数据装载选项

    吃人家嘴短,拿人家手短,用别人的东西就不要BB了,按规矩来吧. 训练和验证的数据都在命令行以变量的形式按如下方式指定: --train-data "train.pfile,context=5 ...

  6. JAVA String.format 方法使用介绍<转>

    在JDK1.5中,String类增加了一个非常有用的静态函数format(String  format, Objece...  argues),可以将各类数据格式化为字符串并输出.其中format参数 ...

  7. C#操作word类文件

    最近频繁操作Word文档,写了很多word的操作代码及方法,虽然已经有很多关于word的操作类了,自己还是进行了一下整合: 1.通过模板创建新文件 2.在书签处插入值 3.插入表格 4.合并单元格 5 ...

  8. C++实现通讯信息管理系统

    通讯信息管理系统 可以实现通讯信息的增加,浏览,删除,修改,查询,保存和读取功能.该系统还限制了通讯信息的条数(limit变量来限制) 文件放置结构: 具体实现代码如下: #include<io ...

  9. innobackupex参数之 --throttle 限速这个值设置多少合理 原创

    innobackupex参数之--parallel --throttle--parallel 此参数用于开启多个子进程并发备份多个数据文件(注意,一个数据文件只会有一个进程完成备份).可以加快备份速度 ...

  10. link_to和其对应要跳转的的url,用path和直接路由方法

    link_to和其对应要跳转的的url,用path和直接路由方法 看看link_to <% @order.each do |oo| %> <div> <%= oo.nam ...