zoukankan      html  css  js  c++  java
  • Spring.NET教程(六)——依赖对象的注入(基础篇)

    一、属性注入

      上篇我们简单提到依赖注入的用途。回顾一下所讲内容,发现在object节点下使用了<property name="Tool" ref="computer"/>。而property 标签正是用来属性注入的。而ref是用来标识是关联到哪个object。而name属性是指属性名。如下:

    <object id="modernPerson" type="SpringNetIoC.ModernPerson, SpringNetIoC">
            <property name="Tool" ref="computer"/>
    </object>

      值类型的注入是需要使用property 节点的value属性。如<property name="Name" value="Liu Dong"/>

      作为内联类型可以使用如下:

    <property name="Friend">
              <object type="SpringNetDi.Person, SpringNetDi"/>
    </property>

      同理,内联类型可以是循环引用的对象(见代码处)。

      二、构造函数注入

      构造器注入使用constructor-arg标签作为标识。同样具有于属性注入相同的方式,使用name、ref、value作为构造器注入的属性,如下:

    <constructor-arg name="argPerson" ref="person"/>
    <constructor-arg name="intProp" value="1"/>

      程序的代码如下:

        public class Person
        {
            public string Name { get; set; }
            public int Age { get; set; }
            public Person Friend { get; set; }
        }

      PersonDao

        public class PersonDao
        {
            private Person argPerson;
            private int intProp;
            public PersonDao(Person argPerson, int intProp)
            {
                this.argPerson = argPerson;
                this.intProp = intProp;
            }
            public void Get()
            {
                //构造函数注入的整型参数
                Console.WriteLine(string.Format("intProp:{0}", intProp));
                //构造函数注入的Person
                Console.WriteLine(string.Format("argPerson Name:{0}", argPerson.Name));
                Console.WriteLine(string.Format("argPerson Age:{0}", argPerson.Age));
                //内联对象Friend
                Console.WriteLine(string.Format("argPerson Friend Name:{0}", argPerson.Friend.Name));
                Console.WriteLine(string.Format("argPerson Friend Age:{0}", argPerson.Friend.Age));
                //内联对象的循环引用
                Console.WriteLine(string.Format("argPerson Friend Friend Name:{0}", argPerson.Friend.Friend.Name));
                Console.WriteLine(string.Format("argPerson Friend Friend Age:{0}", argPerson.Friend.Friend.Age));
            }
        }

    App.config

    <?xml version="1.0" encoding="utf-8" ?>
    <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>
      <spring>
        <context>
          <resource uri="config://spring/objects" />
        </context>
        <objects xmlns="http://www.springframework.net">
          <object id="person" type="SpringNetDi.Person, SpringNetDi">
            <!--属性值类型注入-->
            <property name="Name" value="Liu Dong"/>
            <property name="Age" value="27"/>
            <!--内联对象注入-->
            <property name="Friend">
              <object type="SpringNetDi.Person, SpringNetDi">
                <property name="Name" value="Beggar"/>
                <property name="Age" value="23"/>
                <property name="Friend" ref="person"/>
              </object>
            </property>
            
          </object>
          <object id="personDao" type="SpringNetDi.PersonDao, SpringNetDi">
            <!--构造器注入-->
            <constructor-arg name="argPerson" ref="person"/>
            <constructor-arg name="intProp" value="1"/>
            
          </object>
        </objects>
      </spring>
    </configuration>

      Program

        class Program
        {
            static void Main(string[] args)
            {
                IApplicationContext ctx = ContextRegistry.GetContext();
                PersonDao dao = ctx.GetObject("personDao") as PersonDao;
                dao.Get();
                Console.ReadLine();
            }
        }

      输出效果如下:

    Spring.NET教程(七)——依赖对象的注入(基础篇) 上 Level 200 

  • 相关阅读:
    python数据类型
    集合(set)内置方法
    python第三天
    剑指offer-什么是1G/2G/3G/4G/5G
    经典交换实验-二层交换机实现pc隔离&vlan通信
    linux运维神器-htop&mtr
    三分钟速学linux-进程管理命令
    三分钟速学文件权限管理
    三分钟速学网卡管理配置-nmcli命令
    三分钟速学linux-centos/redhat常见包管理器
  • 原文地址:https://www.cnblogs.com/millen/p/1635954.html
Copyright © 2011-2022 走看看