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入门的更多相关文章

  1. Spring框架[一]——spring概念和ioc入门(ioc操作xml配置文件)

    Spring概念 spring是开源的轻量级框架(即不需要依赖其他东西,可用直接使用) spring核心主要两部分 aop:面向切面编程,扩展功能不是修改源代码来实现: ioc:控制反转,比如:有一个 ...

  2. 【Spring】---【IOC入门案例】

    第一步:导入Jar包 第二步:创建类,在类里面创建方法 public class User { public void add(){ System.out.println("-------- ...

  3. Spring初识及其IOC入门

    一.框架 框架是一些类和接口的集合,它一个半成品,已经对基础的代码进行了封装并提供相应的API,开发者在使用框架时直接调用封装好的api可以省去很多代码编写,从而提高工作效率和开发速度. 二.Spri ...

  4. 1、Spring简介及IOC入门案例

    一.Spring框架介绍 1.介绍 Spring框架是由于软件开发的复杂性而创建的.Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情.然而,Spring的用途不仅仅限于服务 ...

  5. Spring框架的IOC核心功能快速入门

    2. 步骤一:下载Spring框架的开发包 * 官网:http://spring.io/ * 下载地址:http://repo.springsource.org/libs-release-local/ ...

  6. Spring入门1. IoC入门实例

    Spring入门1. IoC入门实例 Reference:Java EE轻量级解决方案——S2SH 前言: 之前学习过关于Spring的一点知识,曾经因为配置出现问题,而总是被迫放弃学习这些框架技术, ...

  7. Spring 核心概念以及入门教程

    初始Spring 在学习Spring之前我们首先要了解一下企业级应用.企业级应用是指那些为商业组织,大型企业而创建并部署的解决方案及应用. 这些大型企业级应用的结构复杂,涉及的外部资源众多,事务密集, ...

  8. Spring MVC 教程,快速入门,深入分析

    http://elf8848.iteye.com/blog/875830/ Spring MVC 教程,快速入门,深入分析 博客分类: SPRING Spring MVC 教程快速入门  资源下载: ...

  9. Spring学习之Ioc控制反转(1)

    开始之前: 1. 本博文为原创,转载请注明出处 2. 作者非计算机科班出身,如有错误,请多指正 ---------------------------------------------------- ...

随机推荐

  1. idea让字体更圆滑

    个人用myeclipse习惯了, 转战idea 觉得自己看题来很方很死板的样子. 然后更换了其字体,如果喜欢你可以试试. 点击file --> setting.. --> 把编辑的字体改成 ...

  2. postgresql数据库实用操作

    查模型的列名: select column_name from information_schema.columns  where table_name= 'your_table'; 应用: 1. 给 ...

  3. ndk学习14: 进程

    Linux进程管理 来自为知笔记(Wiz)

  4. faac编码aac

    // faacode.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <faac.h> #include &l ...

  5. phpcms前台退出登录的时候提示信息'退出成功0'

    问题背景: phpcms前台退出登录的时候,提示了一个退出成功0 让我很困惑为啥有个0呢? 问题分析: 进入 ./phpcms/modules/member/index.php 找到logout方法, ...

  6. PHPCMS V9教程之快速入门

    这篇文章要为大家来介绍PHPCMS V9这个系统的一些基本知识,PHPCMS是基于面向对象的,严格的安装MVC开发模式开发的CMS系统,同时他还是一个非 常不错的PHP框架.下面我们一起看一下PHPC ...

  7. MySQL知识点链接

    1.使用ab进行压力测试详解                                         http://www.365mini.com/page/apache-benchmark. ...

  8. C++实现VPN工具之代码示例

    创建.连接.挂断.删除VPN实现起来并不难,下面给出一套比较完整的代码.该段代码只是示例代码,但是已经通过了编译,对API的使用和VPN操作步骤是没问题的.具体每个API代表的意义可以参看<C+ ...

  9. 【转载】通过JDBC对MySQL数据库的增删改查

    通过JDBC进行简单的增删改查(以MySQL为例) 目录 前言:什么是JDBC 一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JDBC基本操 ...

  10. nginx服务器绑定域名和设置根目录的方法

    nginx服务器绑定域名以及设置根目录非常方便,首先进入nginx安装目录,然后执行 vim conf/nginx.conf 打开nginx的配置文件,找到 server { ..... ..... ...