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>
时间: 2024-10-12 16:22:43

Spring.Net的IOC入门的相关文章

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

Spring概念 spring是开源的轻量级框架(即不需要依赖其他东西,可用直接使用) spring核心主要两部分 aop:面向切面编程,扩展功能不是修改源代码来实现: ioc:控制反转,比如:有一个类,在类中有个方法(非静态的方法),要调用类中的这个方法,则需要创建类的对象,使用对象调用方法.创建类对象的过程,需要new出来对象:而ioc则是将对象的创建不是通过new方式实现,而是交给spring配置来创建对象(即,将对象的创建交给spring来管理): spring是一站式框架 spring

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

第一步:导入Jar包 第二步:创建类,在类里面创建方法 1 public class User { 2 public void add(){ 3 System.out.println("--------->add"); 4 } 5 public static void main(String[] args) { 6 //原始做法 7 User user = new User(); 8 user.add(); 9 } 10 } 第三步:创建Spring配置文件,配置创建类 Spri

Spring FrameWork4(MVC + IOC)快速入门实例

使用Maven创建工程并配置依赖项 首先创建一个Maven Project: 然后选择创建Maven 的webapp实例,当然也可以通过命令行方式创建Maven webapp的项目再转化并导入到MyEclipse中. 在pom.xml中需要对于Spring依赖项进行配置: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-insta

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

开始之前: 1. 本博文为原创,转载请注明出处 2. 作者非计算机科班出身,如有错误,请多指正 ---------------------------------------------------------------------------开始啦啦啦啦啦------------------------------------------------------------------------------- 从开始接触spring起,听到最多的就是Ioc(控制反转)和AOP(面向切面编程

Spring基础知识及入门

---恢复内容开始--- 1 spring框架概述 1.1 什么是spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来.它是为了解决企业应用开发的复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架.Sprin

2019.12.02——Spring学习(ioc)

Spring概念 1. Spring是开源的轻量级框架: 2. Spring核心:IOC(控制反转).AOP(面向切面编程): 3. Spring是一站式框架:Spring在javaee三层结构中,每层都提供不同的解决技术: - web层:springMVC - service层:IOC - dao层:JDBCTemplate Spring的IOC操作 1. 对象创建交给Spring进行管理: 2. IOC操作的两种方式:配置文件.注解. IOC底层原理 原文链接:Spring IOC的原理及详

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

用IDEA详解Spring中的IoC和DI 一.Spring IoC的基本概念 控制反转(IoC)是一个比较抽象的概念,它主要用来消减计算机程序的耦合问题,是Spring框架的核心.依赖注入(DI)是IoC的另外一种说法,只是从不同的角度描述相同的概念.看完这两句,是不是不但没懂,反而更迷惑了,别急,往下看: IoC的背景 我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 如果我们打开机械式手表的后盖,就会看到与

spring的优点 ioc aop

spring 的优点? 1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦 2.可以使用容易提供的众多服务,如事务管理,消息服务等 3.容器提供单例模式支持 4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能 5.容器提供了众多的辅助类,能加快应用的开发 6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等 7.spring属于低侵入式设计,代码的污染极低 8.独立于各种应用服务器 9.spring的DI机制降低了业务对象替换的复

Spring核心技术之IOC容器(一):IOC容器与Bean简介

最近开始研究Spring框架,今天学习Spring的核心内容IOC 与 Bean 1. Spring IOC 与 Bean 简介  Inversion of Control (IoC)即控制反转,也叫dependency injection (DI)依赖注入,Spring实现了一个基于配置文件的复杂工厂模式来提供实现控制反转. org.springframework.beans 和org.springframework.context包是Spring中实现IOC的基础包,其中BeanFactor