前面准备:下载spring.net并解压

下载地址:spring.net下载地址

Ioc:控制反转         DI:依赖注入

一、IOC(控制反转)

1.新建一个控制台程序springTest,引用dll。

Spring.NET > bin > net > 4.0 > release下找到 Comon.Logging.dll和Spring.Core.dll这两个dll复制到项目中添加引用

2.添加一个接口

interface Person
{
void Show();
}

3.添加两个类实现接口

public class zhangsan:Person
{
public void Show()
{
Console.WriteLine("Hello World 张三");
}
}
public class LiSi:Person
{
public void Show()
{
Console.WriteLine("Hello World 李四");
}
}

4.修改配置文件app.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!-- 这个节点要紧靠在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> <startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup> <!-- spring.Net节点配置-->
<spring>
<context>
<!-- 容器配置-->
<resource uri="config://spring/objects"/>
</context>
<objects xmlns="http://www.springframework.net">
<description>An example that demonstrates simple IoC features.</description>
<!-- 容器-->
<!-- name要唯一,type="类的全名称,所在程序集"-->
<object name="zhangsan" type="springTest.zhangsan,springTest"></object>
<object name="lisi" type="springTest.lisi,springTest"></object>
</objects>
</spring>
</configuration>

主要是 <configSections> 和<spring>两个节点里面的内容,<configSections>的内容是固定的,要修改的是<spring>下的内容

5.开始写主函数

 class Program
{
static void Main(string[] args)
{
//普通创建Iperson方式控制权没有反转,要new出来,偶合性高
//IPerson person = new zhangsan(); //创建实例的方式转为容器帮我们创建
//创建容器上下文
IApplicationContext ctx = ContextRegistry.GetContext();
IPerson person = ctx.GetObject("zhangsan") as IPerson;
person.Show();
Console.ReadKey();
}
}

结果:

这就实现了Spring.Net中的Ioc操作

6.把容器单独写到一个xml文件

因为每个需要用到控制反转的类都要配置到配置文件中,如果非常多类,那配置文件就很难看了。所以最好把配置放到一个单独的xml文件中

6.1 添加一个xml文件这里命名为:person.xml放到一个lib文件夹里

6.2 把app.config配置文件中的 objects节点复制到person.xml文件中,然后把app.config配置文件中objects里面的节点都删除,注意objects节点保留

<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net">
<description>An example that demonstrates simple IoC features.</description>
<!-- 容器-->
<!-- name要唯一,type="类的全名称,所在程序集"-->
<object name="zhangsan" type="springTest.zhangsan,springTest"></object>
<object name="lisi" type="springTest.lisi,springTest"></object>
</objects>

6.3在app.config中节点<spring>中加入person.xml文件的关联<resource uri="file://person.xml"/>

<!-- spring.Net节点配置-->
<spring>
<context>
<!-- 容器配置-->
<resource uri="file://person.xml"/>
<resource uri="config://spring/objects"/>
</context>
<objects xmlns="http://www.springframework.net">
</objects >
</spring>

6.4 因为控制台程序默认的根路径为bin下的debug文件夹,所以要把person.xml生成时复制到debug文件夹下

在person.xml文件鼠标右键=>属性=>复制到输出目录=>始终复制

配配置完成,再次运行,效果和原来的一样,以后容器的配置就可以在单独的xml文件里增加了。

二、DI(依赖注入)

1.修改zhangsan类,变成

 public class zhangsan:IPerson
{
public string Name { get; set; }
public void Show()
{
Console.WriteLine("Hello World "+Name);
}
}

2.修改person.xml文件中的节点

<object name="zhangsan" type="springTest.zhangsan,springTest">
<property name="Name" value="张三"/>
</object>

3.运行结果和原来一样,属性的值也可以在文件中配置了:

4.还有一种情况,添加一个类

public  class PersonName
{
public string Name { get; set; }
}

5.修改zhangsan类

public class zhangsan:IPerson
{
PersonName pName = new PersonName();
public void Show()
{
Console.WriteLine("Hello World "+pName.Name);
}
}

6.这样就不能用上面那种属性注入方法了,这时要修改person.xml变成

<object name="zhangsan" type="springTest.zhangsan,springTest">
<property name="pName" ref="pname"/>
</object>
<object name="pname" type="springTest.PersonName,springTest">
<property name="Name" value="张三"/>

运行结果依然是和原来一样。

这就是DI,属性注入。

spring.net中的IOC和DI-初使用的更多相关文章

  1. Spring框架中的IOC和DI的区别

    上次面试被问到IOC和DI的区别时,没怎么在意,昨天又被问到,感觉有点可惜.今晚总算抽点时间,查看了spring官方文档.发现,IoC更像是一种思想,DI是一种行为.为了降低程序的耦合度,利用spri ...

  2. 第四课:通过配置文件获取对象(Spring框架中的IOC和DI的底层就是基于这样的机制)

    首先在D盘创建一个文件hero.txt,内容为:com.hero.Hero(此处必须是Hero的完整路径) 接下来是Hero类 package com.hero; public class Hero ...

  3. 用IDEA详解Spring中的IoC和DI(挺透彻的,点进来看看吧)

    用IDEA详解Spring中的IoC和DI 一.Spring IoC的基本概念 控制反转(IoC)是一个比较抽象的概念,它主要用来消减计算机程序的耦合问题,是Spring框架的核心.依赖注入(DI)是 ...

  4. Spring入门一:IOC、DI、AOP基本思想

    Spring框架是一个集众多涉及模式于一身的开源的.轻量级的项目管理框架,致力于javaee轻量级解决方案.相对于原来学过的框架而言,spring框架和之前学习的struts2.mybatis框架有了 ...

  5. 理解Spring中的IoC和DI

    什么是IoC和DI IoC(Inversion of Control 控制反转):是一种面向对象编程中的一种设计原则,用来减低计算机代码之间的耦合度.其基本思想是:借助于"第三方" ...

  6. Spring MVC -- Spring框架入门(IoC和DI)

    Spring MVC是Spring框架中用于Web应用开发的一个模块.Spring MVC的MVC是Model-View-Controller的缩写.它是一个广泛应用于图像化用户交互开发中的设计模式, ...

  7. Spring系列三:IoC 与 DI

    水晶帘动微风起,满架蔷薇一院香. 概述 在软件工程中,控制反转(IoC)是一种设计思想,对象之间耦合在一起,在运行时自动绑定,并且它们编译时对所需要引用的对象是不确定的.在这个spring教程中,通过 ...

  8. spring学习笔记之---IOC和DI

    IOC和DI (一)IOC (1) 概念 IOC (Inverse of Control) 反转控制,就是将原本在程序中手动创建对象的控制权,交给spring框架管理.简单的说,就是创建对象控制权被反 ...

  9. Spring 注解方式 实现 IOC 和 DI

    注:以下所有测试案例(最后一个除外)的测试代码都是同一个: package cn.tedu.test; import org.junit.Test; import org.springframewor ...

随机推荐

  1. Django 源码小剖: Django 对象关系映射(ORM)

    引 从前面已经知道, 一个 request 的到来和一个对应 response 的返回的流程, 数据处理和数据库离不开. 我们也经常在 views.py 的函数定义中与数据库打交道. django O ...

  2. BW基于ALE的主数据增量机制分析

    1     概述 前段时间在项目中碰到一个问题,地点物料0MAT_PLANT_ATTR属性主数据因为有两个多月没有做增量更新,导致在之后的每次增量抽取活动中因为抽取的数据量过大使得在源系统的进程中发生 ...

  3. 采用ODAC,ODBC连接Oracle【转】

    采用ODAC,ODBC连接Oracle 在没有装oracle的环境中,偶尔会需要访问数据库(Word文档查看数据,开发项目运行等等),简单介绍我用过的方案. 一:ODAC 1.介绍.ODAC,全称:o ...

  4. iOS开发——程序员必备&iOS安装包的三种格式 deb、ipa 和 pxl的解释和说明

    iOS安装包的三种格式 deb.ipa 和 pxl的解释和说明 目前 iOS 平台上常见的安装包有三种,deb.ipa 和 pxl.转自链接:http://fanlb.blogbus.com/logs ...

  5. [转]SQL SERVER – Find Most Expensive Queries Using DMV

    转自:http://blog.sqlauthority.com/2010/05/14/sql-server-find-most-expensive-queries-using-dmv/ The tit ...

  6. text .global_start 和_start

    .text定义一个代码段,这是GCC必须的.global_start和_start代码开始地址定义个标记

  7. ionic hybrid备忘

    ionic 是目前最有潜力的一款开源Hybrid( HTML5+css3+nodejs+Angularjs+PhoneGap)手机应用开发框架.通过 SASS 构建应用程序,它提供了很多 UI 组件来 ...

  8. Winform中进行MD5加密

    Winform,c#进行MD5加密直接上步骤: 1.添加引用 2.在.NET选项卡中找到“System.Web” 3.选中之后,点击“确定”即可,此时会在解决方案中看到刚才添加的引用 4.引用名空间: ...

  9. 实例详解 DB2 排序监控和调优

    实例详解 DB2 排序监控和调优http://automationqa.com/forum.php?mod=viewthread&tid=2882&fromuid=2

  10. CentOS 6.6 配置PuTTY远程登录

    1. 下载与安装 可以下载putty-0.63-installer.exe(http://www.chiark.greenend.org.uk/~sgtatham/putty/download.htm ...