Spring.Net的IOC入门
1.构造器注入

namespace Spring.Net
{
class Program
{
//构造器注入
static void Main(string[] args)
{
IApplicationContext ctx = ContextRegistry.GetContext();
//通过容器创建对象
IUser _user = ctx.GetObject("User") as IUser;
_user.Show();
Console.ReadKey();
}
} public interface IUser
{
string Name { get; set; }
void Show();
} public class User : IUser
{
public string Name { get; set; }
public void Show()
{
Console.WriteLine("我是User的Show方法");
}
}
}
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!--一定要在紧跟着configuration下面添加-->
<configSections>
<!--跟下面Spring.Net节点配置是一一对应关系-->
<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>
<!--name 必须要唯一的,type=类的全名称,所在的程序集-->
<object name="User" type="Spring.Net.User, Spring.Net"> </object>
</objects>
</spring> <startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>
2.属性及构造器注入
namespace Spring.Net
{
class Program
{
static void Main(string[] args)
{
IApplicationContext ctx = ContextRegistry.GetContext();
//通过容器创建对象
IUser _user = ctx.GetObject("User") as IUser;
IPeople _people = ctx.GetObject("People") as IPeople;
Test _test = ctx.GetObject("Test") as Test;
Console.WriteLine(_user.Name);
Console.WriteLine(_user.Age);
Console.WriteLine("--------------------------------------------");
Console.WriteLine(_people.Man.Name);
Console.WriteLine(_people.Man.Age);
Console.WriteLine("--------------------------------------------");
Console.WriteLine(_test.Name);
Console.WriteLine(_test.Age);
Console.ReadKey();
}
} public interface IUser
{
string Name { get; set; }
int Age { get; set; }
void Show();
} public class User : IUser
{
public string Name { get; set; }
public int Age { get; set; }
public void Show()
{
Console.WriteLine("我是User的Show方法");
}
} public interface IPeople
{
IUser Man { get; set; }
} public class People : IPeople
{
public IUser Man { get; set; }
} public class Test
{
public string Name{get;set;}
public int Age{get;set;}
public Test(string name, int age)
{
Name = name;
Age = age;
}
}
}
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!--一定要在紧跟着configuration下面添加-->
<configSections>
<!--跟下面Spring.Net节点配置是一一对应关系-->
<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> <object name="User" type="Spring.Net.User, Spring.Net">
<!--01属性注入-值类型-->
<property name="Name" value="Linq"></property>
<property name="Age" value="25"></property>
</object> <object name="People" type="Spring.Net.People, Spring.Net">
<!--02属性注入-引用类型-->
<property name="Man" ref="User"></property>
</object> <object name="Test" type="Spring.Net.Test, Spring.Net">
<!--03构造函数注入-->
<constructor-arg name="name" value="config配置"></constructor-arg>
<constructor-arg name="age" value="25"></constructor-arg>
</object>
</objects>
</spring> <startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>
3.方法注入
namespace Spring.Net
{
class Program
{
static void Main(string[] args)
{
IApplicationContext ctx = ContextRegistry.GetContext();
ObjectFactory dao = (ObjectFactory)ctx.GetObject("objectFactory");
//查询方法注入
//查询方法注入就利用了这些功能。个人感觉查询方法注入类似抽象工厂,
//为之不同的是,可以不用写抽象的实现代码,通过配置文件动态的切换组件。
dao.CreatePersonDao().Save();
//事件注入
Door door = (Door)ctx.GetObject("door");
door.OnOpen("Opening!");
Console.WriteLine();
Console.Read();
} } public abstract class ObjectFactory
{
//或者可以是一个虚方法
public abstract PersonDao CreatePersonDao();
} public class PersonDao
{
public void Save()
{
Console.WriteLine("保存数据");
}
} //先定义一个委托
public delegate string OpenHandler(string arg); public class Door
{
public event OpenHandler OpenTheDoor; public void OnOpen(string arg)
{
//调用事件
if (OpenTheDoor != null)
{
Console.WriteLine(OpenTheDoor(arg));
}
}
} public class Men
{
public string OpenThisDoor(string arg)
{
return "参数是:" + arg;
}
}
}
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!--一定要在紧跟着configuration下面添加-->
<configSections>
<!--跟下面Spring.Net节点配置是一一对应关系-->
<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>
<!--查询方法-->
<object id="personDao" type="Spring.Net.PersonDao, Spring.Net" singleton="false"/> <object id="objectFactory" type="Spring.Net.ObjectFactory, Spring.Net">
<lookup-method name="CreatePersonDao" object="personDao"/>
</object> <!--事件注入-->
<object id="men" type="Spring.Net.Men, Spring.Net">
<listener event="OpenTheDoor" method="OpenThisDoor">
<ref object="door"/>
</listener>
</object> <object id="door" type="Spring.Net.Door, Spring.Net" />
</objects>
</spring> <startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>
Spring.Net的IOC入门的更多相关文章
- Spring框架[一]——spring概念和ioc入门(ioc操作xml配置文件)
Spring概念 spring是开源的轻量级框架(即不需要依赖其他东西,可用直接使用) spring核心主要两部分 aop:面向切面编程,扩展功能不是修改源代码来实现: ioc:控制反转,比如:有一个 ...
- 【Spring】---【IOC入门案例】
第一步:导入Jar包 第二步:创建类,在类里面创建方法 public class User { public void add(){ System.out.println("-------- ...
- Spring初识及其IOC入门
一.框架 框架是一些类和接口的集合,它一个半成品,已经对基础的代码进行了封装并提供相应的API,开发者在使用框架时直接调用封装好的api可以省去很多代码编写,从而提高工作效率和开发速度. 二.Spri ...
- 1、Spring简介及IOC入门案例
一.Spring框架介绍 1.介绍 Spring框架是由于软件开发的复杂性而创建的.Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情.然而,Spring的用途不仅仅限于服务 ...
- Spring框架的IOC核心功能快速入门
2. 步骤一:下载Spring框架的开发包 * 官网:http://spring.io/ * 下载地址:http://repo.springsource.org/libs-release-local/ ...
- Spring入门1. IoC入门实例
Spring入门1. IoC入门实例 Reference:Java EE轻量级解决方案——S2SH 前言: 之前学习过关于Spring的一点知识,曾经因为配置出现问题,而总是被迫放弃学习这些框架技术, ...
- Spring 核心概念以及入门教程
初始Spring 在学习Spring之前我们首先要了解一下企业级应用.企业级应用是指那些为商业组织,大型企业而创建并部署的解决方案及应用. 这些大型企业级应用的结构复杂,涉及的外部资源众多,事务密集, ...
- Spring MVC 教程,快速入门,深入分析
http://elf8848.iteye.com/blog/875830/ Spring MVC 教程,快速入门,深入分析 博客分类: SPRING Spring MVC 教程快速入门 资源下载: ...
- Spring学习之Ioc控制反转(1)
开始之前: 1. 本博文为原创,转载请注明出处 2. 作者非计算机科班出身,如有错误,请多指正 ---------------------------------------------------- ...
随机推荐
- [hihoCoder#1065]全图传送
[hihoCoder#1065]全图传送 试题描述 先知法里奥是 Dota 系列中的一个英雄.机动性强,推塔能力一流,打钱速度快,传送技能使先知可以全地图支援.在后期比拼中通过强大的兵线控制能力使得对 ...
- Oracle 恢复被删除的数据,解决误操作删除数据
在删除数据的时候不小心,把delete语句执行错了,把别的表给delete,而且还执行了commit!真汗.......数据是相当的重要........废话少说了!赶快找方法吧: 第一种: 1.打开F ...
- 技术博客(初用markdown)。
技术博客 菜鸟教程在这个网站我学到许多有趣的东西,并且弥补了我之前的一些不足之处. 以下为我学习到的内容 输出不同的三位数 以下为代码和输出结果 *** #include<stdio.h> ...
- C#面向对象思想计算两点之间距离
题目为计算两点之间距离. 面向过程的思维方式,两点的横坐标之差,纵坐标之差,平方求和,再开跟,得到两点之间距离. using System; using System.Collections.Gene ...
- Ubuntu 中安装 NetBeans IDE
NetBeans 8.2 刚刚发布,如果你还没有安装的话,这篇简短的教程将会演示如何在 Ubuntu 系统上快速的安装.对安装 NetBeans 需要帮助的开发者来说,这往篇文章会是不错的指导. 给那 ...
- Ngrok搭建服务器
一.ngrok简介及作用 ngrok 是一款用go语言开发的开源软件,它是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道.下图简述了ngrok的原理. ngrok 可 ...
- vSphere、Hyper-V与XenServer 你选哪个?
vSphere.Hyper-V与XenServer 你选哪个? 当在VMware vSphere.Microsoft Hyper-V与Citrix Systems XenServer之间做出选择时,v ...
- replace、replaceAll、replaceFirst的区别详解
String s = "my.test.txt"; System.out.println(s.replace(".", "#")); Sys ...
- [Git]在Windows上安装Git
Windows下要使用很多Linux/Unix的工具时,需要Cygwin这样的模拟环境,Git也一样.Cygwin的安装和配置都比较复杂,就不建议你折腾了.不过,有高人已经把模拟环境和Git都打包好了 ...
- redis安装与参数说明
redis安装与参数说明 博客分类: redis redis 1.下载tcl8.6.1-src.tar.gz 和 redis-2.8.6.tar.gz: 2.安装: 1).安装tcl Java代码 收 ...